Как удалить слово, если один из символов в слове содержит «m» или «M»?
Я пробовал это, но оно не работает:
echo 6.5G 66.5m | sed -e 's/[m][M]//g'
Ваша команда 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
Попробуйте это, он удалит строку, содержащую 'm' или 'M'
echo 6.5G 66.5m | sed "/[mM]/d"
Если вы хотите удалить, вы можете попробовать это
[root@connect ~]# echo 6.5M 66.5m | sed -e 's/m//g' | sed -e 's/M//g'
6.5 66.5
$ echo 6.5G 66.5m | sed -e 's/[[:space:]].*[mM]//g'
6.5G
Обратите внимание, что "m" и "M" образуют один шаблон - ваша (нерабочая) версия ищет "m", за которым следует "M".