I need to replace every character a between xx and zz with hello:
#input
a xxab abzz ca xxbczz aaa axxazza xxczzaxxczz
#output
a xxhellob hellobzz ca xxbczz aaa axxhellozza xxczzaxxczz
This works for one pair, it doesn't work for more xx/zz pairs (it replaces every a between the first xx and last zz):
sed -r ':rep; s/(xx.*)a(.*zz)/\1hello\2/; trep'
I assume the best approach is to use more advanced regex, such as perl.
I am looking for a solution in bash, sed, awk or perl. Is this task even possible with basic/extended regex? Solutions that will not become hard to digest when the pairs have more characters (for example xxxxxx/zzzzzz) are preferred.
Yes, it's best to use Perl
perl -pe's/xx(.+?)zz/"xx".$1=~s|a|hello|gr."zz"/ge' file.txt
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With