sed + как удалить слово, если один из символов в слове содержит «м» или «М»

sed + как удалить слово, если один из символов в слове содержит «м» или «М»

Как удалить слово, если один из символов в слове содержит «м» или «М»?

Я попробовал это, но это не работает:

 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"

Связанный контент