O comando unix podemos usar para acrescentar algum texto para uma linha específica em um arquivo?

StackOverflow https://stackoverflow.com/questions/602921

  •  03-07-2019
  •  | 
  •  

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

Foi útil?

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top