Eu tenho um programa externo que produz um arquivo de saída (largish, 20K linhas possíveis).
Preciso inserir uma nova linha entre a linha 1 e a linha 2. Já estive observando awk e sed - eu uso liners em cada uma com bastante regularidade - mas não consegui encontrar as opções certas para fazem isto.
text-processing
sed
awk
Tim Brigham
fonte
fonte
awk 'NR==2 {print "new line"} 1'
Para o seu caso específico, isso deve ser mais simples:
Explicação: na linha 1 , faça o seguinte
Em seguida, a linha (vazia agora) é impressa novamente como parte do ciclo.
Se você deseja adicionar uma nova linha em vez de um novo caractere de linha (o que eu entendi inicialmente), basta usar
sed
o comandoa\
(anexar):ou mesmo
Anexa "
appended line
" após a linha 1.fonte
sed -i '1 a\\' file
por apenas uma nova linha.'1 aapended line'
exemplo.Eu acho que a
sed
abordagem seria:sed '2 i whatever_line_of_text_you_wanted_to_INSERT' filename.txt
Isso colocará o texto na segunda linha do arquivo e a segunda linha real no arquivo se tornará a terceira.
Observe que, no modo de acréscimo , se necessário, ele deve usar a primeira linha, pois o acréscimo ocorrerá após o número da linha anotado.
sed '1 a whatever_line_of_text_you_wanted_to_INSERT' filename.txt
fonte
Explicação.
fonte
Isso pode funcionar para você:
Se você deseja inserir
something
após a nova linha:Ou se você sed lida com
\n
:Claro que
a
é ainda mais fácil:fonte
\n
linha à linha um!Eu costumo usar
ed
para isso:Semelhante a uma
sed
solução, mas sem a confusão de novas linhas de escape.fonte
echo
's, especialmente sobbash
:ed - filename <<< $'1a\nLine to insert\n.\nw'
.dash
, em muitos sistemas/bin/sh
.echo
". Poupando todosecho
's é realmentebash
única característica, mas reduzindo aecho
contagem de 4 a 1 obras emdash
eksh
também:echo '1a\nLine to insert\n.\nw' | ed - filename
.printf %s\\n
, que coloca uma nova linha após cada argumento que você dá e não estraga caracteres especiais incorporados na linha que você deseja inserir. Além disso, por que usared
quandoex
está disponível?Solução Python
fonte
Usando
sed
códigos de escape ANSI (específicos da Bash):fonte
eu usaria python para isso
fonte
Eu apenas gosto de usar um contador explícito:
fonte
O método mais simples usa
printf
eex
:1a
significa "acrescentar após a primeira linha"; o.
termina o anexo;x
significa salvar e sair.fonte
Nenhuma das respostas acima menciona como salvar as alterações no arquivo original, o que o OP estava pedindo.
Certamente é o que eu preciso quando vou para a página.
Então, supondo que seu arquivo seja chamado
output.txt
Meu caso de uso específico é adicionar automaticamente uma declaração de folha de estilo xsl a um arquivo xml junit.
fonte