Procura por uma palavra específica em cada linha e imprime o resto da linha

0

Eu tenho um arquivo de texto com linhas de URL do servidor, como:

request get https://abc.net/search?q=hello/world/hello/word/search=5&size=10
request get https://abc.net/search?q=hello/world/hello/world/hello/word=5

Neste arquivo de texto, quero o texto após a palavra "search? q=" string e armazenar em outro arquivo arquivo de saída:

hello/world/hello/word/search=5&size=10
hello/world/hello/word/hello/world=5
hello1world1/hello/world/hello/word
    
por vsv 09.12.2015 / 00:51

2 respostas

1

sed -n '/search?q=/{s/.*search?q=//;p;}' infile > outfile

Explicação:

/search?q=/ faz com que o conjunto de comandos a seguir (em chaves) se aplique somente a linhas que contenham essa regex.

s/.*search?q=// substitui a segunda parte (vazia) pela primeira parte.

Em seguida, p imprime a linha.

O sinalizador -n suprime a impressão padrão da linha.

Na verdade, você pode simplificar isso assim:

sed -n '/.*search?q=/{s///;p;}' infile > outfile

Porque quando o padrão alimentado para o comando s/ é deixado em branco, o último padrão usado é usado novamente.

EDIT: Obrigado a RobertL por apontar uma simplificação nos comentários:

sed -n 's/.*search?q=//p' infile > outfile

Isso usa o sinal p no comando s , que só imprime a linha se uma substituição foi feita.

    
por 09.12.2015 / 01:10
0

Se a sua versão do grep suporta o PCRE, você poderia usar algo como

grep -oP 'search\?q=\K.*' infile > outfile
    
por 09.12.2015 / 01:06