
Как удалить слово, если один из символов в слове содержит «м» или «М»?
Я попробовал это, но это не работает:
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"