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

0

Como remover a palavra se um dos caracteres da palavra contiver "m" ou "M"?

Eu tentei isso, mas não funciona:

 echo 6.5G 66.5m | sed -e 's/[m][M]//g'
    
por yael 15.12.2016 / 12:24

4 respostas

3

Seu comando sed é

s/[m][M]//g

Isso removerá apenas a string mM de sua entrada, porque você pediu para corresponder

  • qualquer coisa no conjunto m , seguido por
  • qualquer coisa no conjunto M .

Você provavelmente quis escrever [Mm] . Você pode obter o mesmo efeito adicionando a opção /i ao comando s , embora:

s/m//ig

Agora, isso removerá todos os maiúsculos e minúsculos m s:

$ echo 6.5G 66.5m | sed -e s/m//ig
6.5G 66.5

Sua pergunta pergunta como remover palavras inteiras contendo esta carta. Para isso, precisamos combinar qualquer caractere não espacial antes ou depois. [^ ] corresponde a um caractere não espacial e [^ ]* corresponde a zero ou mais caracteres não espaciais, portanto, 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
    
por 15.12.2016 / 12:52
0
$ echo 6.5G 66.5m | sed -e 's/[[:space:]].*[mM]//g'
6.5G

Observe que "m" e "M" formam um padrão - sua versão (não funcional) procura um "m" seguido por um "M".

    
por 15.12.2016 / 12:50
-1

Se você quiser remover, tente isso

[root@connect ~]# echo 6.5M 66.5m | sed -e 's/m//g' | sed -e 's/M//g'
6.5 66.5
    
por 15.12.2016 / 12:29
-2

Tente isso, ele excluirá a linha que contém 'm' ou 'M'

echo 6.5G 66.5m | sed "/[mM]/d"
    
por 15.12.2016 / 12:50