Marque as linhas sinalizadas aleatórias com XML como tag

0

Eu tenho um arquivo com algumas linhas aleatórias marcadas com % , como marcar todo o conteúdo sinalizado com uma tag semelhante a xml.

EXEMPLO:

tt gs sdf 
% sdjfsg
% sdfsdf

sdfsdf

% sdfsd
% rewerwe

PARA:

tt gs sdf 
<TAG>sdjfsg
sdfsdf</TAG>

sdfsdf

<TAG>sdfsd
rewerwe</TAG>
    
por Ramaprakasha 01.05.2017 / 21:30

1 resposta

0

Você poderia dar uma chance a 'sed' ...

sed -ri ':x;$!{N;bx};s/% ([^\n]*)(\n|$)/<tag><\/tag>\n/g;s/<\/tag>\n<tag>/\n/g;s/\n$//' tst.txt

Isso marcará seu arquivo no lugar.

Explicação:

  1. :x;$!{N;bx} - > globbing arquivo para um bufferline
  2. s/% ([^\n]*)(\n|$)/<tag><\/tag>\n/g - > Marcando todas as linhas que começam com '%'
  3. s/<\/tag>\n<tag>/\n/g - > excluir tags desnecessárias (se a tag de fechamento for seguida pela tag de abertura)
  4. s/\n$// - > excluir nova linha desnecessária no final do arquivo

Eventualmente, é possível fazê-lo ainda mais curto, mas essa foi a primeira maneira direta que eu pude imaginar.

    
por Marcus Kolenda 02.05.2017 / 04:51