
単語内の文字の 1 つに「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
s がすべて削除されます。
$ echo 6.5G 66.5m | sed -e s/m//ig
6.5G 66.5
あなたの質問は、この文字を含む単語全体を削除する方法を尋ねています。そのためには、前後のスペース以外の文字に一致する必要があります。 [^ ]
スペース以外の文字に一致し、[^ ]*
0個以上のスペース以外の文字に一致するので、
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」は 1 つのパターンを形成することに注意してください。(動作しない) バージョンでは、「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"