从 sed 列表中删除带有减号的字段

问题描述 投票:0回答:1

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
sed
1个回答
2
投票

您有重叠的匹配项,但每个字符只能匹配(和替换)一次:

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
© www.soinside.com 2019 - 2024. All rights reserved.