Como faço para encontrar um bloco de texto, a partir de um arquivo de texto, contendo uma string específica [duplicada]

1

Eu tenho procurado extrair um bloco de texto, de um arquivo de texto, contendo uma string sem sucesso. Qualquer ajuda seria muito apreciada.

Por exemplo: Eu tenho um arquivo chamado xyz com o conteúdo abaixo:

10:10:10 ::  blah blah blah
10:10:10 ::  blah blah blah
10:10:11 ::  $VAR1 = {
10:10:11 ::     'Id' = 'A0001'
10:10:11 ::     'Name' => 'Smith'
10:10:12 ::     'Age' => '21'
10:10:12 ::  };
10:10:12 ::  blah blah blah
10:10:12 ::  blah blah blah
10:10:14 ::  $VAR1 = {
10:10:14 ::     'Id' = 'A0002'
10:10:15 ::     'Name' => 'Jane'
10:10:15 ::     'Age' => '18'
10:10:15 ::  };
10:10:15 ::  blah blah blah
10:10:16 ::  blah blah blah
10:10:16 ::  $VAR1 = {
10:10:16 ::     'Id' = 'A0003'
10:10:16 ::     'Name' => 'Adams'
10:10:16 ::     'Age' => '25'
10:10:16 ::  };

e eu quero extrair um bloco de texto entre $ VAR1 e}; contendo um A0002. então o resultado de sed / grep / awk está abaixo:

10:10:14 ::  $VAR1 = {
10:10:14 ::     'Id' = 'A0002'
10:10:15 ::     'Name' => 'Jane'
10:10:15 ::     'Age' => '18'
10:10:15 ::  };

Até agora, consegui extrair todos os blocos de texto entre $ VAR1 e}; usando abaixo:

sed -n "/VAR1/,/};/p" xyx

que retorna o seguinte. Existe uma maneira de filtrar o texto contendo A0002:

10:10:11 ::  $VAR1 = {
10:10:11 ::     'Id' = 'A0001'
10:10:11 ::     'Name' => 'Smith'
10:10:12 ::     'Age' => '21'
10:10:12 ::  };
10:10:14 ::  $VAR1 = {
10:10:14 ::     'Id' = 'A0002'
10:10:15 ::     'Name' => 'Jane'
10:10:15 ::     'Age' => '18'
10:10:15 ::  };
10:10:16 ::  $VAR1 = {
10:10:16 ::     'Id' = 'A0003'
10:10:16 ::     'Name' => 'Adams'
10:10:16 ::     'Age' => '25'
10:10:16 ::  };
    
por Narayan Akhade 28.09.2015 / 12:54

1 resposta

0

Altere a entrada para um registro por linha e grep, como:

cat input.txt | tr '\n' ' ' | tr ';' '\n' | egrep A0002
    
por 28.09.2015 / 13:11