Como remover um caractere específico após uma palavra específica

1

Como removo o caractere , após uma palavra específica?

Por exemplo, desejo excluir o caractere , após a palavra IBM

  IBM, Inc.:APP-VM-Core:4.4.2.0:04,

os resultados esperados devem ser

  IBM Inc.:APP-VM-Core:4.4.2.0:04,

Enquanto isso, faço o seguinte

   echo “IBM, Inc.:APP-VM-Core:4.4.2.0:04,” | sed s'/,//'

mas o problema é que ele exclui todos os caracteres , , independentemente da primeira palavra antes do , . No meu caso, quero excluir o , somente após IBM .

Exemplo:

echo "APPLE, Inc.:APP-VM-Core:4.4.2.0:04,"| sed s'/,//'

APPLE Inc.:APP-VM-Core:4.4.2.0:04,

mas deve ser como

APPLE, Inc.:APP-VM-Core:4.4.2.0:04, 
    
por maihabunash 24.03.2015 / 15:40

2 respostas

2

Tente:

$ echo "IBM, Inc.:APP-VM-Core:4.4.2.0:04," | sed '/^ *IBM/s/,//'
IBM Inc.:APP-VM-Core:4.4.2.0:04,

ou:

$ echo "IBM, Inc.:APP-VM-Core:4.4.2.0:04," | sed 's/^\( *IBM\),//'
IBM Inc.:APP-VM-Core:4.4.2.0:04,
    
por 24.03.2015 / 15:49
1

Se você estiver tentando modificar um arquivo, prefira usar ex ou ed , mas definitivamente não sed . Por que não sed ?

sed é um S tream ED itor e você modificaria os dados provenientes de um fluxo com ele.

Usando ex , você pode fazer o seguinte

ex -sc '%s/IBM,/IBM/g|x' file wheren file é o nome do seu arquivo.

Como alternativa. Se você quiser remover as guias principais espaços ou , precisará de mais de ^ * . Por exemplo. A solução estaria usando awk da seguinte forma:

awk '{sub(/^[ \t]+IBM,/,"IBM");};1' input_file > output_file

ou

awk '{sub(/^[[:blank:]]*IBM,/,"IBM");};1' input_file > output_file

Preste atenção em você. ^ * não poderá detectar as guias .

Você também pode usar ex conforme explicado anteriormente, mas incluindo agora a expressão regular para corresponder apenas à linha que começa com espaços e inclui o padrão IBM

ex -sc '%s/^[[:blank:]]*IBM,/IBM/g|x' input_file
    
por 24.03.2015 / 15:55