Como posso adicionar o número de série a partir de 141 após cada sinal de hash?

2

Como posso alterar programaticamente este arquivo de texto

put returns between paragraphs#
20170218
for linebreak add 2 spaces at end# blah
_italic_ or **bold**#
20170219
20170220#
201702#21

para isso usando ferramentas como sed?

put returns between paragraphs#141
20170218
for linebreak add 2 spaces at end#142 blah
_italic_ or **bold**#143
20170219
20170220#144
201702#14521
    
por stacko 20.02.2017 / 00:28

2 respostas

2

Embora seja tecnicamente possível com sed (é Turing completo), é muito difícil, porque sed não tem aritmética. Este é um trabalho para o awk.

Se você deseja substituir apenas o primeiro # em cada linha, basta informar para substituir # por # seguido por um número crescente. O Awk converte automaticamente inteiros em suas notações decimais em strings.

awk -v n=141 '/#/ {sub(/#/, "#" (++n))}'

Se você quiser substituir cada caractere # , a maneira mais simples é tornar # o separador de campo e adicionar o número no início de cada campo, exceto o primeiro:

awk -v n=141 -F '#' '{for (i=2; i<=NF; i++) $i = (++n) $i}'
    
por 20.02.2017 / 00:49
0
< yourfile perl -slpe 's/#/$&.$k++/e' -- -k=141

também pode ser usado para realizar as edições.

    
por 20.02.2017 / 05:48