Como deletar texto inteiro desde o início de uma linha com uma determinada string

Como deletar texto inteiro desde o início de uma linha com uma determinada string

Eu uso sed -n '/string/,$p' file >> otherfilepara copiar texto de uma linha com determinada string para outro arquivo.

Agora quero que o texto copiado seja excluído do arquivo original. Tentei métodos diferentes com sed e awk, mas nada funcionou.

Como usar o sed para deletar o texto de um arquivo da linha inicial com uma determinada string?

texta

texta1

textb    <- string, delete rest of the text from here

textb1

textc

textc1

ou seria mais fácil cortar em vez de copiar com sed e qual seria o comando?

Responder1

Você podecescreva um intervalo endereçado de linhas em um novo arquivo e, em seguida,delete o intervalo - a parte complicada é impedir que o dcomando seja tratado como parte do nome do arquivo de saída. No GNU sed, você pode fazer isso dividindo a escrita e a exclusão em expressões separadas usando-e

NOTA IMPORTANTE: isso será truncado otherfileem vez de anexado a ele

sed -i.bak -e '/string/,${w otherfile' -e 'd;}' file

Responder2

Ou use ed!

ed -s file <<< $'/textb/,$w otherfile\n/textb/,$d\nw\nq'

Dada a sua opiniãoarquivode:

texta

texta1

textb    <- string, delete rest of the text from here

textb1

textc

textc1

Depois de executar o edcomando,arquivotorna-se:

texta

texta1

(há uma linha em branco no final que desaparece na formatação aqui); eoutro arquivocontém:

textb    <- string, delete rest of the text from here

textb1

textc

textc1

Os edcomandos são:

  • /textb/,$w otherfile-- escreva esse intervalo de linhas paraoutro arquivo
  • /textb/,$d-- exclui esse intervalo de linhas
  • w--grava o arquivo alterado no disco
  • q- saiu

Responder3

Se você usar este comando sed -n '/string/,$p' file >> otherfilepara extrair todas as linhas daquelecontendo stringao final do arquivo ( $) para um outro arquivo.

A maneira mais fácil de extrair o complemento disso é complementar a partida:

sed '/string/,$d' file >> someOtherDifferentFile

E se você quiser/precisar atualizar o arquivo original, basta copiar o resultado de volta.

É isso que a -iopção sed faz, então isso atualizará o arquivo original:

sed -i.bak '/string/,$d' file

informação relacionada