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.

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

-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

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.