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"

相關內容