首页 > 解决方案 > 从模式空间的开头重复搜索 sed

问题描述

当您在 sed 中发出 's//g' 命令时,搜索会在每次替换后从被替换模式的右侧开始恢复。例如:

$ sed 's/foo/oog/g;'
ffoo
foog

同时,如果该命令再次应用于整行,我们将得到oogg结果(两次替换)。当然,一个人可以只发出两次或三次相同的命令——但是如果我希望它重复运行直到没有匹配项怎么办?sed 可以做到这一点,还是我需要求助于 awk?

标签: sedreplacetext-processing

解决方案


是的,sed支持分支命令,例如bandt

$ echo 'ffoo' | sed ':a s/foo/oog/; ta'
oogg
  • :a用标签标记替换命令a
  • taa只要替换成功就会跳转到标签

这是另一个例子:

$ echo 'coffining' | sed ':d s/fin//; td'
cog

有关完整的详细信息,请参阅sed 手册


推荐阅读