adiciona o número do pedido ao texto específico

1

Existe alguma maneira de adicionar um número em um texto específico? No meu arquivo de texto:

<a href="http://localhost/file1.txt">file </a>
<a href="http://localhost/file2.txt">file </a>

<a href="http://localhost/file1.txt">file </a>
<a href="http://localhost/file2.txt">file </a>
<a href="http://localhost/file2.txt">file </a>

<a href="http://localhost/file.1.txt">file </a>
<a href="http://localhost/file.2.txt">file </a>
<a href="http://localhost/file.3.txt">file </a>
<a href="http://localhost/file.4.txt">file </a>

e adicione o número do pedido ao arquivo e a saída:

<a href="http://localhost/file1.txt">file 1</a>
<a href="http://localhost/file2.txt">file 2</a>

<a href="http://localhost/file1.txt">file 1</a>
<a href="http://localhost/file2.txt">file 2</a>
<a href="http://localhost/file2.txt">file 3</a>

<a href="http://localhost/file1.txt">file 1</a>
<a href="http://localhost/file2.txt">file 2</a>
<a href="http://localhost/file3.txt">file 3</a>
<a href="http://localhost/file4.txt">file 4</a>
    
por juicebyah 11.06.2015 / 04:30

2 respostas

3

sed 's|\([^.e]*\).txt">.... |&|' <in >out

E ... você simplificou novamente.

E ... compliquei de novo. Portanto, o acima apenas copiará números que já estão na string - não corrige nenhum que esteja quebrado. Isto irá:

{  sed '/./!G;s/\n/::::::&::::/
        s/\(.*[^0-9]\)[0-9][^.]*/  /' |
   nl   -d::|
   sed 's/ *\([0-9]*\)\(.*\)  \(.*\) / /'
}  <infile >outfile

Que usa o separador de páginas lógicas de nl para contar apenas as seções delimitadas por linhas em branco. É muito mais envolvente do que a primeira, no entanto.

Eu o expandi um pouco para lidar com nomes de arquivos (<> de uma única linha!) bastante arbitrários.

    
por 11.06.2015 / 04:40
2

Uma maneira com awk :

awk '
  !NF { c=0 ; print ; next }
  { sub(/file.*txt/,"file"++c".txt")
    sub(/>file </,">file "c"<")
    print
  }
'
    
por 11.06.2015 / 05:04