sed: anexar saída de linha e número

3

No Linux, digamos que se queira adicionar a seguinte linha antes da linha número cinco (assim a linha nuber 5 se torna a linha número 6) e quer que todas as linhas da saída sejam numeradas através da sed 'ferramenta' =

sed -n '5\Insert this line before line nuber 29' FILE

Pergunta : Onde = entra nessa construção para numerar as linhas da saída inteira?

Eu sei nl e cat --number e tal, mas como sed em si fornece uma ferramenta interna para isso, seria bom trabalhar com apenas uma caixa de ferramentas.

Atualização : é assim que o resultado deve ser, de uma forma ou de outra: cada linha com um número e a linha acima espremida no lugar da linha número cinco etc.

1   A line
2   Another line
3   as abovr
4   again
5   Insert this line before line nuber 29
6   This originally was line number 5
7   nearing the end
8   last line
    
por erch 05.12.2014 / 09:48

1 resposta

3

Usar = imprimirá o número da linha e, em uma nova linha, a linha:

~$ sed '=' myfile
1
a
2
b
3
c
4
d
5
e
6
f
7
g
8
h

Se você usar duas invocações de sed, poderá imprimir na mesma linha:

~$ sed '=' myfile | sed '{N;s/\n/ /}'
1 a
2 b
3 c
4 d
5 e
6 f
7 g
8 h

E você pode mais um para inserir a linha usando o comando i \ :

$ sed '5 i\
before 5
' myfile | sed '=' | sed '{N;s/\n/ /}'
1 a
2 b
3 c
4 d
5 before 5
6 e
7 f
8 g
9 h
    
por 05.12.2014 / 10:05