Remplacement de la chaîne en fonction du numéro de ligne

50

J'ai une situation où je veux remplacer une chaîne particulière dans de nombreux fichiers

Remplacez une chaîne AAA par une autre chaîne BBB, mais il existe de nombreuses chaînes commençant par AAA ou se terminant par AAA. Je souhaite remplacer une seule chaîne à la ligne 34 et en conserver d'autres intactes.

Est-il possible de spécifier par numéro de ligne, sur tous les fichiers cette chaîne est exactement sur la 34ème ligne.

Krypto
la source

Réponses:

82

Vous pouvez spécifier le numéro de ligne dans sed ou NR (numéro d'enregistrement) dans awk.

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

ou utilisez FNR (enregistrement de numéro de fichier) si vous souhaitez spécifier plusieurs fichiers sur la ligne de commande.

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

ou

sed '34s/AAA/BBB/'

faire un remplacement sur place avec sed

sed -i '34s/AAA/BBB/' file_name
VanagaS
la source
-3

supposons que vous souhaitiez remplacer la troisième ligne du fichier_record:

sed -i "s/`head -3 file_record | tail -1 `/replaced/" file_record
RAMAN
la source
utilisez la citation en retour avant head et after -1 ... ici, il ne le prend pas
RAMAN
1
Cela ne va tout simplement pas au travail. Il a besoin de quelques échappées lourdes. Et si la troisième ligne est dupliquée ailleurs?
Sparhawk