sed + como remover a palavra se um dos caracteres da palavra contiver "m" ou "M"

sed + como remover a palavra se um dos caracteres da palavra contiver "m" ou "M"

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 mMde 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 /iopção ao scomando:

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"

informação relacionada