Como imprimo as linhas deletadas em um arquivo para um novo arquivo em um único comando?

0

Por exemplo:
O arquivo A contém 20 linhas e eu excluo as primeiras 10 linhas com sed -i 1,10d A.txt

Qual comando eu escrevo para imprimir essas 10 linhas deletadas no arquivo B?

Eu tentei sed -i 1,10d A.txt >> B.txt , o que não funcionou.

    
por imabeast 28.02.2018 / 07:56

4 respostas

3

Usando sed e o script sed

1,10{
    w otherfile
    d
}

Isso gravará as linhas de 1 a 10 no arquivo otherfile , excluindo-as da entrada.

Com edição in-loco do arquivo original (usando o GNU sed aqui):

sed -i '1,10{w B.txt
        d}' A.txt

A nova linha é necessária para delimitar o nome do arquivo. Ou

sed -i -e '1,10{w B.txt' -e 'd}' A.txt
    
por 28.02.2018 / 08:38
1

com ksh93 :

{ head >> B.txt; cat 1<>; A.txt; } < A.txt

Se o seu cat for GNU cat , ele irá reclamar que o stdout se refere ao mesmo arquivo que o stdin. Você pode contornar isso usando cat|cat em vez de cat ou usar ksh93 cat incorporado, por exemplo, usando command /opt/ast/bin/cat em vez de cat ou colocando /opt/ast/bin à frente de $PATH .

O operador de redirecionamento 1<>; se comporta como o operador padrão 1<> (aberto no modo de leitura + gravação sem truncamento ), exceto que também trunca o arquivo no final se o comando redirecionado foi bem sucedido.

    
por 28.02.2018 / 19:26
0

Supondo que seus requisitos sejam:

  • Escreva as primeiras 10 linhas do arquivo A no arquivo B
  • Remova as primeiras 10 linhas do arquivo A com sed -i 1,10d A.txt

Você pode fazer da seguinte maneira:

head -10 A.txt > B.txt
sed -i 1,10d A.txt

O primeiro comando irá escrever as 10 primeiras linhas do arquivo A.txt em B.txt
O segundo comando (como sugerido por você) irá apagar as 10 primeiras linhas do arquivo A.txt

Note que, para obter as primeiras 10 linhas, você deve fazer antes que essas linhas sejam excluídas

    
por 28.02.2018 / 08:17
-1

você pode conseguir isso usando sed com canos

sed -n '1,10p' a.txt > b.txt | sed -i '1,10d' a.txt

as primeiras 10 linhas de a.txt serão copiadas para b.txt e as primeiras 10 linhas a.txt serão excluídas.

    
por 28.02.2018 / 08:24