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?
3 Réponses :
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
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.
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.
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