
如果單字中的一個字元包含“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"