sed命令的奇怪行为

时间:2013-08-02 02:58:04

标签: linux macos bash sed

写这篇文章时有些奇怪:

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命令

有谁知道这个结果的原因?

感谢。

2 个答案:

答案 0 :(得分:2)

执行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>不匹配,因此未被修改。