Como faço para preencher as tags finais usando sed, awk ou qualquer outro comando?

4

Eu tenho um arquivo txt semelhante a este:

<sss>ss<

ou

<firstword>anotherword<

Eu quero que pareça com isso

<sss>ss</sss>

ou

<firstword>anotherword</firstword>

Basicamente, pegando a primeira palavra e colocando-a em uma tag final.

E antes de você perguntar o que tentei, a resposta é nada, não consegui pensar em nada.

    
por DisplayName 28.10.2014 / 13:27

2 respostas

10

Com entrada:

<abc>def<
<firstword>anotherword</firstword>
<ghi>klm<

Uso:

sed 's/<\([^>]*\)>\(.*\)<$/<><\/>/' input

Saída:

<abc>def</abc>
<firstword>anotherword</firstword>
<ghi>klm</ghi>

A linha sed afeta somente as linhas que terminam em < (por causa do <$ ) e captura os padrões entre o primeiro par <> e entre '> <' e cola tudo de volta ao duplicar o primeiro par no final (mais um fechamento '>')

    
por 28.10.2014 / 13:45
3

Aqui está uma abordagem de perl, essencialmente a mesma que a sed solution de Anthon:

$ perl -pe 's/<(.+)>(.+)</<$1>$2<\/$1>/' file
<sss>ss</sss>
    
por 28.10.2014 / 14:09