2
votes

commande shell pour changer de fichier et enregistrer

Je souhaite modifier le contenu du fichier avec un script shell , comme remplacer la ligne 3 du fichier par une nouvelle chaîne, puis enregistrer dans le fichier d'origine . Quelqu'un peut-il donner des conseils pour y parvenir?


0 commentaires

3 Réponses :


3
votes

C'est un peu inhabituel de faire cela avec vim à partir d'un script shell, mais puisque vous avez demandé:

gawk -i inplace 'NR==3{$0="a new string"}1' file

Habituellement, vous choisiriez un autre outil comme ( sed -i code> est une modification sur place):

sed -i '3s/.*/a new string/' file

Ou avec awk

vim -es '+3s/.*/a new string' '+wq' file


0 commentaires

2
votes

Dans un système de type Unix, vous pouvez utiliser sed pour remplacer le contenu d'une ligne spécifique. Par exemple, la commande ci-dessous remplacera la 3ème ligne par "HelloWorld" dans le fichier text.txt.

sed -i '3s/aaa/bbb/' text.txt 

Si vous ne souhaitez modifier qu'une partie du contenu de la 3ème ligne, vous pouvez utiliser: p>

sed -i '3c HelloWorld' text.txt

cela ne remplacera que la chaîne "aaa" par "bbb" en 3ème ligne.


1 commentaires

Je recommanderais d'utiliser -i.bak afin de créer une sauvegarde avant d'effectuer le changement. Ou cp text.txt {, - bak} avant d'utiliser sed.



2
votes

ed serait plus approprié que sed ou vim , car il est conçu pour éditer des fichiers sur place par programmation. ( sed est la version s tream de ed ; -i est une extension non standard.)

printf '3s/.*/new stuff/\nw\n' | ed my_file.txt


0 commentaires