Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我写的时候有一些奇怪的东西:
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 日
有谁知道这个结果的原因?
谢谢。
sed不递归匹配输出模式。即读取输入行,当匹配到一个模式时,生成修改后的输出,然后扫描输入行的其余部分。“s”命令不会扫描新创建的输出。因此,将第一个替换为 后LES,将不会扫描新创建的空格,并且LE不会匹配下一个,因为没有前导空格。
LES
LE
替代解决方案:
echo "VAL LES LE VAL LE VAL" | sed -E -e 's/ *LES?//g'
这里<space>LES<space>匹配并被<space>. 所以下一个开始的字符将LE<space>与 sed expr 不匹配<space>LES?<space>,因此未修改。
<space>LES<space>
<space>
LE<space>
<space>LES?<space>