Altere a entrada para um registro por linha e grep, como:
cat input.txt | tr '\n' ' ' | tr ';' '\n' | egrep A0002
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 :: };
Altere a entrada para um registro por linha e grep, como:
cat input.txt | tr '\n' ' ' | tr ';' '\n' | egrep A0002