Ваша команда sed
s/[m][M]//g
Это удалит только строку mM
из его ввода, потому что вы попросили сопоставить
m
, а затем M
. Вы, вероятно, хотели вместо этого написать [Мм]
. Вы можете получить тот же эффект, добавив параметр / i
к команде s
, хотя:
s/m//ig
Теперь это удалит все верхние или нижние регистры m
s:
$ 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