Remover hifenização com sed

5

Eu tenho um arquivo xml simples contendo algumas palavras hifenizadas sobre quebras de página. A entrada é algo como

 ba bla bla hyphe-</page>
 <page>nated bla bla bla

e a saída deve se parecer com

 bla bla bla</page>
 <page>hyphenated bla bla bla

Estou ciente do comando sed N , mas não tenho controle se minha hifenização ocorre em linhas ímpares ou pares.

Posso fazer a remoção de hifenização como skteched acima com sed? Existem maneiras alternativas de fazer isso (por exemplo, com outros comandos shell do UNIX ou com python ou perl)?

EDIT. A pedido, um exemplo real dos meus arquivos de entrada:

[...] and vapours, upon the comparison of the air-thermo-</page>
<page>meter with the mercurial thermometer, upon the elastic [...]

EDIT2: Alltho 'Eu peguei o exemplo aleatoriamente, é realmente muito desagradável. A saída desejada neste caso é

 [...] and vapours, upon the comparison of the</page>
<page>air-thermometer with the mercurial thermometer, upon the elastic [...]

i.e. use o espaço um separador de palavras. O principal problema para mim é escrever um padrão que abranja a quebra de linha no original. E sim, o padrão só deve remover os hifens imediatamente antes de </page>

    
por jknappen 15.01.2016 / 15:27

2 respostas

3

Algum tipo de monstro) Com o perl, deve ser mais fácil

cat file
ba bla bla hyphe-</page>
<page>nated bla bla bla
and the output should look like

bla bla bla</page>
<page>hyphenated bla bla bla

É o GNU sed (em algumas outras opções sed-s -E é usado para expressões regulares estendidas)

sed -nr '/[[:alpha:]]+-<\/[[:alpha:]]+>$/{
N
s!([[:alpha:]]+)-(</[[:alpha:]]+>)\n(<[[:alpha:]]+>)([[:alpha:]]+)!\n!}
p' file
ba bla bla </page>
<page>hyphenated bla bla bla
and the output should look like

bla bla bla</page>
<page>hyphenated bla bla bla
    
por 15.01.2016 / 15:49
4

Oneliner em Perl (obrigado, obrigado!):

perl -0 -pe 's/\s+(\S+)-(<\/page>\s+<page>)(\S+)/$2$1$3/g' filename

O que faz: corresponde à expressão regular e usa partes combinadas para reconstruir sua palavra.

    
por 15.01.2016 / 15:55