web-dev-qa-db-fra.com

Quelle est la meilleure façon de modifier un fichier avec un script Bash?

Utilisation/bin/bash sur RHEL 5.8 et je souhaite automatiser la modification d'un fichier. J'ai besoin du script pour rechercher le fichier et remplacer une ligne dans le fichier. Exemple de ligne:

Other line
Current date 01121990
Other line

Recherchez cette ligne et remplacez la chaîne de date avec une date prédéterminée. Je ne peux pas echo à un nouveau fichier et entrer dans ma date puisque ce fichier sera copié à partir d'un fichier spécifique au serveur. Merci!

7
Paul
your_date='your desired date'
sed -i "s/^Current date.*/Current date ${your_date}/" /path/to/file

C'est le moyen le plus simple. Cela suppose que toutes les lignes contenant une date à remplacer sont également les seules lignes pour commencer par "date actuelle".

Notez que le niveau utilisateur qui exécute cette commande doit également avoir la permission d'éditer ce fichier.

-Je signifie en ligne Modifier, ce qui signifie que vous modifiez directement le fichier.

^Current date.*

Signifie toutes les lignes commençant par: date actuelle et se terminant par n'importe quoi. En d'autres termes, remplacez la ligne entière avec ce qui se trouve dans la deuxième /.../ une partie de la chose sed.

Double "sont utilisés autour de la déclaration SED afin que les variables soient utilisées comme variables, pas des chaînes.

15
Lizardx

ed peut faire édition sur place des fichiers aussi! Le numéro d'inode du fichier édité reste inchangé.

file='/path/to/file'
your_date='your desired date'
ls -i "$file"
printf '%s\n' H ",g/^Current date.*/s//${your_date}/" wq | ed -s "$file"
ls -i "$file"
1
charx