写这篇文章时有些奇怪:
echo "VAL LES LE VAL LE VAL" | sed -E -e 's/ LES? / /g'
我明白了:
VAL LE VAL VAL
而不是:
VAL VAL VAL
保留LES之后的单词LE,但最后一个LE单词被删除了。
我在2005年5月10日的Mac OS X 10.8上使用sed命令
有谁知道这个结果的原因?
感谢。
答案 0 :(得分:2)
sed执行not recursively match output patterns。也就是说,读取输入行,并且当匹配模式时,生成修改的输出,并扫描输入行的 rest 。 “s”命令将不扫描新创建的输出。因此,在您使用LES
替换第一个后,将不会扫描新创建的空间,并且由于没有前导空格,因此下一个
LE
将不会匹配。
替代解决方案:
echo "VAL LES LE VAL LE VAL" | sed -E -e 's/ *LES?//g'
答案 1 :(得分:0)
echo "VAL LES LE VAL LE VAL" | sed -E -e 's/ LES? / /g'
此处<space>LES<space>
匹配并被<space>
取代。所以下一个开头的char将是LE<space>
,它与sed expr <space>LES?<space>
不匹配,因此未被修改。