sed + 単語内の文字の 1 つに「m」または「M」が含まれている場合に単語を削除する方法

sed + 単語内の文字の 1 つに「m」または「M」が含まれている場合に単語を削除する方法

単語内の文字の 1 つに「m」または「M」が含まれている場合、その単語を削除するにはどうすればよいでしょうか?

これを試してみましたが、うまくいきませんでした:

 echo 6.5G 66.5m | sed -e 's/[m][M]//g'

答え1

sedコマンドは

s/[m][M]//g

mM一致を要求したため、入力から文字列のみが削除されます。

  • セット内の任意のものm、その後に
  • セット内の何かM

おそらく、代わりに次のように記述するつもりだったのでしょう。ただし、コマンドにオプション[Mm]を追加することで同じ効果を得ることができます。/is

s/m//ig

これで、大文字または小文字のms がすべて削除されます。

$ 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"

関連情報