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

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

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

 echo 6.5G 66.5m | sed -e 's/[m][M]//g'
0
15.12.2016, 13:27
4 ответа

Ваша команда 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
4
28.01.2020, 04:48

Попробуйте это, он удалит строку, содержащую 'm' или 'M'

echo 6.5G 66.5m | sed "/[mM]/d"
-2
28.01.2020, 04:48

Если вы хотите удалить, вы можете попробовать это

[root@connect ~]# echo 6.5M 66.5m | sed -e 's/m//g' | sed -e 's/M//g'
6.5 66.5
-1
28.01.2020, 04:48
$ echo 6.5G 66.5m | sed -e 's/[[:space:]].*[mM]//g'
6.5G

Обратите внимание, что "m" и "M" образуют один шаблон - ваша (нерабочая) версия ищет "m", за которым следует "M".

0
28.01.2020, 04:48

Теги

Похожие вопросы