sed 没有按我的预期工作
我与 Linux pietro-Veriton-X2640G 5.15.0-122-generic #132~20.04.1-Ubuntu SMP 8 月 30 日星期五 15:50:07 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux
我期待着
echo 'w=7 -o=... -w=8 -w=9 k=3 iop=0' | sed -e 's/ -[^ ]* / /g'
应该销毁所有以减号开头并给出的空白分隔字段
w=7 k=3 iop=0
但我明白了
w=7 -w=8 k=3 iop=0
您有重叠的匹配项,但每个字符只能匹配(和替换)一次:
echo 'w=7 -o=... -w=8 -w=9 k=3 iop=0' | sed -e 's/ -[^ ]* / /g'
^^^^^^^^
^^^^^^
^^^^^^
由于您的匹配以空格结尾并且您要用空格替换它(并且重复的字符集无法匹配空格),因此只需将其从两种模式中删除即可:
echo 'w=7 -o=... -w=8 -w=9 k=3 iop=0' | sed -e 's/ -[^ ]*//g'
输出:
w=7 k=3 iop=0