2

我写的时候有一些奇怪的东西:

echo "VAL LES LE VAL LE VAL" | sed -E -e 's/ LES? / /g'

我得到:

VAL LE VAL VAL

代替:

VAL VAL VAL

LES 之后的单词 LE 被保留,但最后一个 LE 单词被很好地删除。

我在 Mac OS X 10.8 上使用 sed 命令,日期为 2005 年 5 月 10 日

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

谢谢。

4

2 回答 2

2

递归匹配输出模式。即读取输入行,当匹配到一个模式时,生成修改后的输出,然后扫描输入行的其余部分。“s”命令不会扫描新创建的输出。因此,将第一个替换为 后LES将不会扫描新创建的空格,并且LE不会匹配下一个,因为没有前导空格。

替代解决方案:

echo "VAL LES LE VAL LE VAL" | sed -E -e 's/ *LES?//g'
于 2013-08-02T03:06:00.363 回答
0
echo "VAL LES LE VAL LE VAL" | sed -E -e 's/ LES? / /g'

这里<space>LES<space>匹配并被<space>. 所以下一个开始的字符将LE<space>与 sed expr 不匹配<space>LES?<space>,因此未修改。

于 2013-08-02T05:50:55.533 回答