
Como remover a palavra se um dos caracteres da palavra contém “m” ou “M”?
Eu tentei isso, mas não funciona:
echo 6.5G 66.5m | sed -e 's/[m][M]//g'
Responder1
Seu comando sed é
s/[m][M]//g
Isso removerá apenas a string mM
de sua entrada, porque você pediu para corresponder
- qualquer coisa no set
m
, seguido por - qualquer coisa no conjunto
M
.
Você provavelmente pretendia escrever [Mm]
em vez disso. Você pode obter o mesmo efeito adicionando a /i
opção ao s
comando:
s/m//ig
Agora, isso removerá todos os s maiúsculos ou minúsculos m
:
$ echo 6.5G 66.5m | sed -e s/m//ig
6.5G 66.5
Sua pergunta pergunta como remover palavras inteiras que contêm esta carta. Para isso, precisamos combinar quaisquer caracteres que não sejam de espaço antes ou depois. [^ ]
corresponde a um caractere não espacial e [^ ]*
corresponde a zero ou mais caracteres não espaciais, então queremos
s/[^ ]*m[^ ]*//ig
Testando isso:
$ echo 6.5G 66.5m | sed -e 's/[^ ]*m[^ ]*//ig'
6.5G
e
$ echo Five Merry Women went fishing | sed -e 's/[^ ]*m[^ ]*//ig'
Five went fishing
Responder2
$ echo 6.5G 66.5m | sed -e 's/[[:space:]].*[mM]//g'
6.5G
Observe que o "m" e o "M" formam um padrão - sua versão (não funcional) procura um "m" seguido por um "M".
Responder3
Se você quiser remover, você pode tentar isso
[root@connect ~]# echo 6.5M 66.5m | sed -e 's/m//g' | sed -e 's/M//g'
6.5 66.5
Responder4
Tente isto irá excluir a linha contendo 'm' ou 'M'
echo 6.5G 66.5m | sed "/[mM]/d"