grep pattern e o conteúdo depois disso, e remover outros

0

Estou com um problema para definir uma palavra-chave específica e seu conteúdo. Este é um arquivo de amostra, o arquivo real é maior que isso.

Exemplo

user@linux:~$ cat url.txt 
abcrandomtextdef another random text blablabla
another random iwantthis text abcrandomtextdef url=https://www.google.com ghirandomtextjkl
ghirandomtextjkl another random text yadayada
wxyz iwantthis abcdef url=yahoo.com yaday
user@linux:~$ 

A saída desejada seria assim.

iwantthis url=https://www.google.com
iwantthis url=yahoo.com

Estas são minhas tentativas de obter essa saída, mas como você pode ver, não funcionou de verdade.

user@linux:~$ grep url= url.txt | cut -d ' ' -f3,6
iwantthis url=https://www.google.com
abcdef
user@linux:~$ 
    
por Sabrina 25.11.2018 / 03:30

1 resposta

1

sed parece ser a tarefa certa para isso:

% sed -n 's/.* \(iwantthis\) .* \(url=[^ ]*\) .*/ /p' url.txt
iwantthis url=https://www.google.com
iwantthis url=yahoo.com

Como isso funciona:

-n - apenas as linhas de impressão que correspondem a um comando "p"

s/.../p - pesquise e substitua, imprimindo linhas que correspondam

.* \(iwantthis\) .* \(url=[^ ]*\) .* - Isto irá procurar a palavra "iwantthis" rodeada por espaços e lembrá-la, e também procurar por "url=" seguido por não-espaços, e lembrar disso. O .* em cada final significa que as coisas antes de "iwantthis" e coisas depois da URL são descartadas.

/ - Substitua pelas duas palavras lembradas

    
por 25.11.2018 / 03:36

Tags