我需要将xx
和zz
之间的每个 字符a
替换为hello
:
#input
a xxab abzz ca xxbczz aaa axxazza xxczzaxxczz
#output
a xxhellob hellobzz ca xxbczz aaa axxhellozza xxczzaxxczz
这适用于一对,它不适用于更多的 xx/zz
对(它替换第一个 xx
之间的每个 a
最后一个 zz
):
sed -r ':rep; s/(xx.*)a(.*zz)/\1hello\2/; trep'
我认为最好的方法是使用更高级的正则表达式,例如 perl
。
我正在寻找 bash
、sed
、awk
或 perl
的解决方案。使用基本/扩展正则表达式甚至可以完成这项任务吗?当对具有更多字符(例如 xxxxxx/zzzzzz
)时,不会变得难以理解的解决方案是首选。
最佳答案
是的,最好用Perl
perl -pe's/xx(.+?)zz/"xx".$1=~s|a|hello|gr."zz"/ge' file.txt
关于regex - 替换两个字符串之间的多次出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48105521/