Como podemos remover o texto do início para uma determinada palavra selecionada usando o comando sed no linux

3

Eu tenho uma consulta simples relacionada à seleção e substituição de texto no linux. Para esclarecer a questão, estou usando o comando sed . Eu tenho o seguinte texto.

  

hello world, sou apenas um texto simples para exibição.

Agora eu quero imprimir para o hello world apenas eu posso fazer isso usando o seguinte comando no linux.

    echo "hello world, I am just simple text for display." | sed 's/, I am.*//g'

Agora eu quero totalmente inversa desta função, como posso remover o hello world usando comandos simples como o sed.
Saída exigida. , eu sou apenas um texto simples para exibição. Será muito proveitoso se os comandos do Linux (sed etc) forem usados. Obrigado

    
por Muhammad Abdullah 10.07.2014 / 09:41

3 respostas

4

Para reverter o efeito do seu comando E manter a mesma parte da string a ser correspondida (supondo que essa seja a única parte da correção da string e você queira se livrar de qualquer outra parte que possa variar), você pode faça:

echo "hello world, I am just simple text for display." | sed 's/^.*\(, I am.*\)//g'

Resultado:

, I am just simple text for display

O que a expressão regular está fazendo:

  • ^. *: combinando qualquer caractere no começo da string até a próxima expressão
  • \ (& amp; \): para capturar a parte da string que é correspondida pela expressão entre (deve ser escapada por \ ou eles corresponderão ao caractere parêntese).
  • , eu sou. *: o jogo que você nos deu,
  • \ 1: será substituído pelo resultado da correspondência da primeira subexpressão entre parênteses

Dessa forma, você tem o efeito inverso exato do comando em sua pergunta, usando a mesma parte da string para fazer a correspondência.

    
por Benoit 10.07.2014 / 10:21
1

$ echo "hello world, I am just simple text for display." | sed 's/^hello world//' , I am just simple text for display.

Explicação: em sed (e em outros lugares, como no vim), use carat ( ^ ) para indicar o início da linha. A substituição remove apenas esse texto.

    
por Andrew 10.07.2014 / 09:51
1

Você pode usar a sed option s . O comando será,

echo "hello world, I am just simple text for display."|sed 's/.*, //g'

I am just simple text for display.

Explicação

  • .* corresponde a qualquer número de caracteres
  • ,<space> corresponde e espaço
  • Portanto, a combinação .*,<space> corresponde a tudo antes e o espaço inclui os dois e substitui-os por nada.
por Registered User 10.07.2014 / 09:58