Sed problema de correspondência, saída não como esperado

2

O que preciso realizar:

Eu quero corresponder recursivamente tudo, de string1 a fixed_string (ambos incluídos) em text_files e gerar os resultados em um result_file .

Meu comando é o seguinte:

sed -nf /path/to/patterns_file /path/to/lists/* > result_file

Por exemplo:

  • string1 em padrões é: 4321/14 .
  • fixed_string em padrões é: ------------------------------------------------------

O conteúdo de patterns_file é o seguinte:

/\<4321\/14\>/,/------------------------------------------------------/p
/\<4319\/14\>/,/------------------------------------------------------/p
/\<5183\/14\>/,/------------------------------------------------------/p
/\<487\/08\>/,/------------------------------------------------------/p
/\<8767\/14\>/,/------------------------------------------------------/p
/\<8768\/14\>/,/------------------------------------------------------/p
/\<8769\/14\>/,/------------------------------------------------------/p
/\<10270\/01\>/,/------------------------------------------------------/p
/\<8354\/14\>/,/------------------------------------------------------/p
/\<8883\/14\>/,/------------------------------------------------------/p
/\<3978\/13\>/,/------------------------------------------------------/p
/\<6344\/13\>/,/------------------------------------------------------/p
/\<3882\/09\>/,/------------------------------------------------------/p
/\<8881\/14\>/,/------------------------------------------------------/p
/\<9913\/14\>/,/------------------------------------------------------/p
/\<6596\/13\>/,/------------------------------------------------------/p

Meus arquivos de teste são os seguintes (localizados no diretório de listas)

JUZGADO_CIVIL_10_PRO_2014-10-24.TXT
JUZGADO_CIVIL_11_PRO_2014-10-24.TXT
JUZGADO_CIVIL_12_PRO_2014-10-24.TXT
JUZGADO_CIVIL_13_PRO_2014-10-24.TXT
JUZGADO_CIVIL_14_PRO_2014-10-24.TXT
JUZGADO_CIVIL_15_PRO_2014-10-24.TXT
JUZGADO_CIVIL_16_PRO_2014-10-24.TXT
JUZGADO_CIVIL_17_PRO_2014-10-24.TXT
JUZGADO_CIVIL_18_PRO_2014-10-24.TXT
JUZGADO_CIVIL_19_PRO_2014-10-24.TXT
JUZGADO_CIVIL_1_PRO_2014-10-24.TXT
JUZGADO_CIVIL_20_PRO_2014-10-24.TXT
JUZGADO_CIVIL_21_PRO_2014-10-24.TXT
JUZGADO_CIVIL_22_PRO_2014-10-24.TXT
JUZGADO_CIVIL_23_PRO_2014-10-24.TXT
JUZGADO_CIVIL_2_PRO_2014-10-24.TXT
JUZGADO_CIVIL_3_PRO_2014-10-24.TXT
JUZGADO_CIVIL_4_PRO_2014-10-24.TXT
JUZGADO_CIVIL_5_PRO_2014-10-24.TXT
JUZGADO_CIVIL_6_PRO_2014-10-24.TXT
JUZGADO_CIVIL_7_PRO_2014-10-24.TXT
JUZGADO_CIVIL_8_PRO_2014-10-24.TXT
JUZGADO_CIVIL_9_PRO_2014-10-24.TXT
JUZGADO_NOTARIAL_PRO_2014-10-24.TXT

O conteúdo de um arquivo txt carregado aqui: obtenha JUZGADO_CIVIL_18_PRO_2014-10-24 .TXT

O restante dos arquivos é semelhante a este.

O problema é que, quando há outra expressão correspondente entre string1 e fixed_string , recebo linhas duplicadas ou triplicadas como saída:

[...output omitted...]

Expte. N°: 8769/14        -Foja: 9- JARA MELAGRANI, DIEGO
               C/MUNICIPALIDAD DE RESISTENCIA S/EJECUCION DE HONORARIOS -
estesestese

                CARLOS D. LUGON
         -Abogado  Secretario -
Juzgado Civil y Comercial Nº 18

 "2014 Año de la concordia, el diálogo y la paz - S.S. Francisco"

Expte. Nº 8769/14 - MMMN
Resistencia, 20 de octubre de 2014.
Téngase al Dr. DIEGO JARA MELAGRANI por presentado, parte,
con el patrocinio letrado del Dr. MAURO DANIEL FOGLIATTI, con domicilio
legal constituido, dándosele en autos la intervención que por derecho
corresponda. A lo demás, estése a lo resuelto en el Expte.Nº 8768/14 que
corresponda. A lo demás, estése a lo resuelto en el Expte.Nº 8768/14 que
corre por cuerda.- NOT.-
corre por cuerda.- NOT.-


OMAR A. MARTINEZ
OMAR A. MARTINEZ
- Juez -
- Juez -
Juzgado Civil y Comercial Nº 18
Juzgado Civil y Comercial Nº 18


NOTA DE SECRETARIA:
NOTA DE SECRETARIA:
                                Se deja constancia que a fs.12/13 del Expte.Nº
                                Se deja constancia que a fs.12/13 del Expte.Nº
8768/14 caratulado "JARA MELAGRANI, DIEGO C/ MUNICIPALIDAD DE RESISTENCIA
8768/14 caratulado "JARA MELAGRANI, DIEGO C/ MUNICIPALIDAD DE RESISTENCIA
S/ EJECUCION DE HONORARIOS", se ha ordenado la acumulación de la presente
S/ EJECUCION DE HONORARIOS", se ha ordenado la acumulación de la presente
causa a aquellos actuados.- CONSTE. SECRETARIA, 20 de octubre de 2014.-
causa a aquellos actuados.- CONSTE. SECRETARIA, 20 de octubre de 2014.-

[...output omitted...]

------------------------------------------------------

[...output omitted...]

Aqui, por exemplo, há "8768/14" entre

'8769/14' and '------------------------------------------------------'.

Se não estiver claro o que quero alcançar ou qual é o problema, posso tentar esclarecer melhor o problema.

Como pode corrigir esse problema? Existe uma solução melhor e mais eficiente para isso?

    
por mariano 27.10.2014 / 06:11

2 respostas

2

Porque dentro do 8769/14 "document" você encontrará a string "8768/14", então 2 patterns estão combinando as mesmas linhas. Você precisará ser mais específico sobre o intervalo inicial, como

/^Expte. N°: 8769\/14\>/,/------------------------------------------------------/p

Isso corresponde apenas no início de uma linha.

    
por glenn jackman 27.10.2014 / 17:20
1

Deixa pra lá, eu encontrei uma solução para essa questão adicionando o comando 'uniq' como em

sed -nf /path/to/patterns_file /path/to/lists/* | uniq > result_file

Obrigado de qualquer maneira àqueles que tiveram tempo para ler e ajudar.

    
por mariano 21.12.2014 / 01:18