como mover um bloco de linhas para outra posição com sed?

0

como mover um bloco de linhas para outra posição com sed?

imagine um arquivo como:

ligne
ligne
toto
tutu
titi

quero começar:

ligne
toto
tutu
titi
ligne 

o que é conhecido padrão é "tutu" & o número da linha de destino "2", e o número de linhas de origem do bloco de texto que eu quero mover.

então eu quero que ele seja copiado (com as linhas anteriores de 1 linha e 1 linha sucessiva) para a posição específica que eu já conheço (linha n ° 2)

Eu tentei:

sed '2,5{ H ;d ; } ;  2{ p ; x ; }' file

mas a parte "colar" não funciona, por isso só é exibida:

ligne

Eu não entendo como colar o buffer em um valor numérico de uma linha; & é isso que eu quero.

    
por francois P 23.10.2018 / 15:21

2 respostas

2

OK, assim como está escrito:

$ sed -n '1p; 2h; 3,/tutu/N; /tutu/ N; ${G; p;}' file
ligne
toto
tutu
titi
ligne
    
por 23.10.2018 / 15:40
1

Não sed, mas seu ancestral ed :

  • Corresponder um intervalo fornecido por:
    • pesquise tutu e subtraia uma linha
    • pesquise tutu e adicione uma linha
  • m ove esse bloco para a linha 2 (depois da linha 1 )
  • Salvar e sair ( w , q )

Como resultado:

ed -s file <<< $'/tutu/-1,/tutu/+1m1\nw\nq'
    
por 23.10.2018 / 17:48

Tags