Como grep e obter apenas string correspondente?

2

Sinta-se à vontade para mudar o título, pois ele não corresponde à minha pergunta 100%

Eu tenho algo assim em um arquivo:

junk
long_ass_string "/I/want/this/$code/$name" long_ass_string
junk

Esclarecendo o exemplo:

  • A parte / I / want / this / é sempre a mesma
  • $ code e $ name são dinâmicos e diferentes para cada string
  • Dentro de long_ass_string pode haver mais strings / I / want / this / $ code / $ name e eu gostaria de obter todas elas.
  • As aspas (isto = > ") estão presentes em todas as sequências / I / want / this / $ code / $ name .

Até agora eu tentei ...

grep -w "/I/want/this/*" file # produz long_ass_string em grep -o "/I/want/this/*" file # saídas / I / want / this /

Gostaria de evitar usar a solução de obter apenas x caracteres extras antes e / ou depois de

    
por sysfiend 28.02.2017 / 14:23

2 respostas

2

Eu usaria grepping todas as strings e depois classificaria com um segundo grep, por exemplo:

grep -o '"[^"]*"' file

Saída:

"/I/want/this/$code/$name"

Comente sobre o uso de expressões regulares

Esta expressão /I/want/this/* corresponde a /I/want/this e, em seguida, zero ou mais caracteres de barra, você provavelmente quis dizer: /I/want/this/.* que corresponde a /I/want/this/ e zero ou mais caracteres.

    
por 28.02.2017 / 14:51
0

se eu entendi bem, você deseja obter o ridd off da primeira variável $ code e $ name em cada linha. Você pode canalizar seu resultado para cortar isso. Seguindo seu exemplo:

grep "/I/want/this/" myfile.txt | cut -d '/' -f 1-4,7-

com -d você define o delimitador (o símbolo / por exemplo) e com -f você indica o campo a ser agarrado.
Neste caso, do delimitador 1 a 4 ( /I/want/this/ ) e todos os campos que vêm depois do sétimo delimitador (isso é feito com o argumento 7- ) Assim você tira /$code/$name que estão entre o 4º e o 7º delimitador em todas as linhas que correspondem à expressão regular definida.

echo "/I/want/this/NOT/THAT/and/everythingelse" | grep "/I/want/this/" | cut -d '/' -f 1-4,7- 
/I/want/this/and/everythingelse
    
por 28.02.2017 / 14:46

Tags