Substituindo sequência com base no número da linha


50

Eu tenho uma situação em que quero substituir uma sequência específica em muitos arquivos

Substitua uma string AAA por outra string BBB, mas existem muitas strings começando com AAA ou terminando em AAA, e eu quero substituir apenas uma na linha 34 e manter outras intactas.

É possível especificar pelo número da linha, em todos os arquivos essa sequência está exatamente na 34ª linha.

Respostas:


82

Você pode especificar o número da linha em sed ou NR (número de registro) em awk.

awk 'NR==34 { sub("AAA", "BBB") }'

ou use FNR (registro de número de arquivo) se desejar especificar mais de um arquivo na linha de comando.

awk 'FNR==34 { sub("AAA", "BBB") }'

ou

sed '34s/AAA/BBB/'

para fazer a substituição no local com o sed

sed -i '34s/AAA/BBB/' file_name

-3

vamos supor que você deseja substituir a terceira linha no file_record:

sed -i "s/`head -3 file_record | tail -1 `/replaced/" file_record

use aspas antes da cabeça e depois de -1 ... aqui não está aceitando #
RAMAN

1
Isso simplesmente não vai funcionar. Precisa de alguma fuga pesada. E se a terceira linha for duplicada em outro lugar?
Sparhawk
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.