web-dev-qa-db-fra.com

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

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 y a beaucoup de chaînes commençant par AAA ou se terminant par AAA, et je veux remplacer un seul à la ligne 34 et garder les autres intacts.

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.

52
krypto

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
88
ramruma