如果单词中的一个字符包含“m”或“M”,如何删除该单词?
我尝试了这个,但它不起作用:
echo 6.5G 66.5m | sed -e 's/[m][M]//g'
答案1
你的 sed 命令是
s/[m][M]//g
这只会从输入中删除字符串mM
,因为您要求匹配
- 集合中的任何内容
m
,然后是 - 集合中的任何内容
M
。
你可能本来想写[Mm]
。不过,您可以通过将/i
选项添加到命令来获得相同的效果s
:
s/m//ig
现在这将删除所有大写或小写字母m
:
$ echo 6.5G 66.5m | sed -e s/m//ig
6.5G 66.5
您的问题询问如何删除包含该字母的整个单词。为此,我们需要匹配之前或之后的任何非空格字符。 [^ ]
匹配一个非空格字符,并[^ ]*
匹配零个或多个非空格字符,所以我们想要
s/[^ ]*m[^ ]*//ig
测试这个:
$ echo 6.5G 66.5m | sed -e 's/[^ ]*m[^ ]*//ig'
6.5G
和
$ echo Five Merry Women went fishing | sed -e 's/[^ ]*m[^ ]*//ig'
Five went fishing
答案2
$ echo 6.5G 66.5m | sed -e 's/[[:space:]].*[mM]//g'
6.5G
请注意,“m”和“M”形成一种模式 - 您的(非工作)版本会查找“m”后跟“M”。
答案3
如果你想删除可以尝试这个
[root@connect ~]# echo 6.5M 66.5m | sed -e 's/m//g' | sed -e 's/M//g'
6.5 66.5
答案4
试试这个,它将删除包含“m”或“M”的行
echo 6.5G 66.5m | sed "/[mM]/d"