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.

krypto
fonte

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
VanagaS
fonte
-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
RAMAN
fonte
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