为什么 sed 替换命令中多余的空格被删除

为什么 sed 替换命令中多余的空格被删除

我有一个数据文件,其中包含以下数据:

abcd.vc.9902 03493092 90239 m
abc 131323 78202 g
cdb.5491-3 03402394 23241 k

我正在尝试删除以空格开头的数字。所以我写的命令是

sed 's/ [0-9]*//g' data

输出结果如下

abcd.vc.9902m
abcg
cdb.5491-3k

如果你注意到,它删除了最后一个字母前的空格。我想要的输出是:

abcd.vc.9902 m
abc g
cdb.5491-3 k

答案1

只需*用 替换+(如果您使用的是 ,则将其转义sed,而不是sed -r,因为这+是扩展的正则表达式模式):

sed 's/ [0-9]\+//g' data

或者

sed -r 's/ [0-9]+//g' data

在正则表达式中*表示前一个标记的零个或多个匹配,因此在您的情况下,如果没有匹配,即空格后没有数字,它也会匹配。

另一方面,如果您使用+,您将匹配空格后的(至少)一个或多个数字,因此您将获得所需的结果。

相关内容