替换两个字符串之间的多次出现

Pes*_*The 5 regex bash perl awk sed

我需要将和之间的每个字符替换为:axxzzhello

#input
a xxab abzz ca xxbczz aaa axxazza xxczzaxxczz
#output
a xxhellob hellobzz ca xxbczz aaa axxhellozza xxczzaxxczz
Run Code Online (Sandbox Code Playgroud)

这适用于一对,不适用于更多对(它替换第一个和最后一个之间的xx/zz每个):axxzz

sed -r ':rep; s/(xx.*)a(.*zz)/\1hello\2/; trep'
Run Code Online (Sandbox Code Playgroud)

我认为最好的方法是使用更高级的正则表达式,例如perl.

我正在寻找bashsedawk或的解决方案perl。使用基本/扩展正则表达式是否可以完成此任务?当配对具有更多字符(例如xxxxxx/zzzzzz)时,不会变得难以理解的解决方案是首选。

Hyn*_*dil 3

是的,最好使用 Perl

perl -pe's/xx(.+?)zz/"xx".$1=~s|a|hello|gr."zz"/ge' file.txt
Run Code Online (Sandbox Code Playgroud)