O comando unix podemos usar para acrescentar algum texto para uma linha específica em um arquivo?
Pergunta
Alguém sabe de uma série de comandos UNIX que permite a alguém para acrescentar algum texto ao final de uma linha específica em um arquivo?
ex
A linha 1
Linha 2
Linha 3
Linha 4
Eu gostaria de acrescentar o texto "informações extra" para a linha 3 para que o arquivo agora será parecido com este:
A linha 1
Linha 2
Linha 3, informação extra
Linha 4
Solução
Perl:
perl -p -e's{\n}{, extra information\n} if $. ==3' myfile
$. é o número da linha
Outras dicas
em awk é:
awk '{s=$0; if( NR==3 ){ s=s ", Extra Information" } print s;}' myfile > newfile
versão sed adequada:
sed -e '3s/$/, Extra Information/' -i myfile
Aqui está uma versão com sed
portátil (sem opção -i):
sed '3s/$/Hello World/' myfile
Note que myfile
não é modificada, para que possa recuperar-se de possíveis erros.
awk 'NR == 3 { print $0 ", extra information" } NR != 3' myfile
A parte antes das chaves é a condição : Se estamos na linha 3, que anexar algum texto. Se chaves são omitidos, a ação padrão é apenas para imprimir $0
. Redirecionar para um novo arquivo ou pipe para outro programa conforme apropriado. Você não pode redirecionar para o mesmo arquivo que você está apenas lendo. Uma solução comum é para redirecionar para um novo arquivo e, em seguida, passar sobre se o comando foi bem sucedido:
somecommand > oldfile.tmp && mv oldfile.tmp oldfile
sed -e "s/^Line 3/\0, extra info/" -i text.txt
Se você quer que a informação extra a ser anexado a apenas uma linha, qualquer um dos sed / awk one-liners vai fazer.
Se você quiser acrescentar algo para (quase) todas as linhas no arquivo, você deve criar um segundo arquivo com a informação extra para cada linha e uso paste
:
$ cat myfile
line 1
line 2
line 3
line 4
$ cat extra
something
something else
$ paste myfile extra
line 1 something
line 2
line 3 something else
line 4