Como obter sub-string para uma string usando análise de padrão?

2

Eu quero obter sub-string de qualquer string usando análise de padrão. Exemplo de string:

<string module name="Jai" fathername="S.S. Khan" phone="1234">
    <address complete="startz us" />
    <worker company="Delta star" />
<string module name="Jai" phone="1234">
<string module name="Jai" value="" phone="1234">
    <status now="single />
<string module name="Jai" email= "[email protected]" value="" phone="1234">
    <address complete="startz us" />
    <worker company="Delta star" />

Eu quero os seguintes valores ( grep ed por phone ):

string module name="Jai" fathername="S.S. Khan"
string module name="Jai"
string module name="Jai" value=""
string module name="Jai" email= "[email protected]" value=""

Se eu executar o seguinte comando, ele retornará apenas as linhas que possuem phone :

cat file.txt | grep phone.

Para superar isso, estou executando:

cat file.txt | grep phone | sed 's/phone=".*"/phone=""/g' | grep -v phone'

Funciona, mas quero fazer isso com a análise de padrões exata.

Alguém pode me ajudar ou me orientar como posso fazer isso?

    
por Muhammad Abdullah 01.04.2014 / 08:46

1 resposta

2

Eu acho que você quer usar expressões regulares para fazer sua análise de padrão. Você pode tentar este perl oneliner:

cat file.txt | perl -ne 'print "\n" if /(string module name=.*?)phone.*/'
  • perl -ne analisará sua file.txt linha por linha
  • então ele imprimirá apenas o conteúdo do padrão entre o (...)
por Sylvain Pineau 01.04.2014 / 09:22