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