
Eu uso sed -n '/string/,$p' file >> otherfile
para 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 d
comando 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 otherfile
em 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 ed
comando,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 ed
comandos são:
/textb/,$w otherfile
-- escreva esse intervalo de linhas paraoutro arquivo/textb/,$d
-- exclui esse intervalo de linhasw
--grava o arquivo alterado no discoq
- saiu
Responder3
Se você usar este comando sed -n '/string/,$p' file >> otherfile
para extrair todas as linhas daquelecontendo string
ao 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 -i
opção sed faz, então isso atualizará o arquivo original:
sed -i.bak '/string/,$d' file