【发布时间】:2013-03-01 23:24:46
【问题描述】:
有谁知道如何与 sed 匹配每个 'foo' 实例,当它在以下字符串中跟随 'bar' 时除外?
'foo boo foo foo 酒吧 foo 富 呵呵
期望的结果(匹配的实例以粗体显示)
'MaTcHeD 嘘 MaTcHeD foo 酒吧 MaTcHeD MaTcHeD MaTcHeD'
经过大量测试,我发现:
sed -e "s/foo\( *\)bar/FOO\1BAR/g" -e "s/foo/MaTcHeD/g" -e "s/FOO\( *\)BAR/foo\1bar/g"
它首先匹配 'foo bar' 实例并用一些临时字符串(此处为 'FOO BAR')替换它们,然后匹配其余的 'foo' 实例,然后将 'foo bar' 替换为它们的原版...(我希望我清楚...)
但无论如何,这根本不干净。我会很惊讶没有更直接的方法可以做到这一点,即使到目前为止我还没有找到它。
任何提示将不胜感激。 :-)
非常感谢,
【问题讨论】:
-
是带常规分隔符的字符串吗?例如空格还是制表符?我的意思是,
foo bar部分有固定空格? -
分隔符包含可变数量的空格(但仅限空格)。 sed 不是必须的,只要我可以用其他东西替换匹配的匹配项,但不修改空格字符分布。
标签: sed