sed + 如果单词中的字符之一包含“m”或“M”,如何删除该单词

sed + 如果单词中的字符之一包含“m”或“M”,如何删除该单词

如果单词中的一个字符包含“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"

相关内容