如果将\ g设置为global,为什么字符串中只有“ the”之一被替换?
sed -E 's/(^|_)(the|an|is)(_|$)/\1/g' <<< "the_the_river"
= the_river
答案 0 :(得分:1)
如上所述,问题是后面的_
被消耗了。为避免重叠的匹配,您需要lookarounds或word boundaries。不能使用\<
,\>
或某些版本\b
之类的单词边界,因为下划线属于单词字符。
替代项可以是使用支持环视的PCRE的perl one-liner。
perl -pe 's/(?<![^_])(?:the|an|is)(?:_|$)//g' <<< "the_the_river"
河
(?<![^_])
是一个否定的后缀,用于检查单词之前是否没有任何字符besides下划线。它在开始或下划线之前的任意位置匹配。(?:the|an|is)
是non-capturing group alternating的不同词。(?:_|$)
假设您要删除(使用)单词后的下划线。