Je souhaite écrire un script Shell permettant de lire le fichier à partir d'une commande et de l'éditer sans intervention manuelle (en recherchant du texte et en le remplaçant par un autre).
Je n'ai besoin d'aucun éditeur de texte pour cela .... simplement pour effectuer une recherche de texte (comme avec grep), puis le remplacer par un autre texte et enregistrer les modifications ....
C'est là que sed
entre en jeu. Une commande sed
a le format suivant:
[pattern1][,pattern2][!] command [args]
Il utilise des expressions rationnelles afin que cela puisse/soit un peu difficile. Quelques exemples de base tirés du 2ème lien ci-dessous:
# remplace (recherche et remplace) "foo" par "bar" sur chaque ligne sed's/foo/bar/'# remplace uniquement la 1ère instance d'une ligne sed 's/foo/bar/4' # remplace uniquement la 4ème instance d'une ligne sed's/foo/bar/g '# remplace TOUTES les instances d'une ligne sed' s/\ ( . *\foo\(. * foo \)/\ 1bar\2/'# remplace le dernier cas avant sed' s/\ (. * \) foo/\ 1bar/'# remplace uniquement le dernier cas # remplace "foo" par "bar" UNIQUEMENT pour les lignes contenant "baz" sed '/ baz/s/foo/bar/g' # remplace "foo" par "bar" SAUF les lignes qui contiennent "baz" sed '/baz/!s/foo/bar/g' # change "écarlate" ou "Ruby" ou "puce" en "rouge" sed/s/écarlate/rouge/g; s/Ruby/rouge/g; s/puce/red/g '# la plupart des seds gsed'/scarlet\| Ruby\| puce/red/g '# GNU sed only
Quelques références
Réponse très tardive. Cependant, cela pourrait aider les autres avec un problème/une question similaire.
Je recommanderais de créer et d'appliquer un patch. Un bel exemple peut être trouvé ici .
Par exemple, en supposant qu'un nouveau fichier.txt contienne les modifications que vous souhaitez appliquer à old.txt. Vous pouvez exécuter les commandes sur un terminal ou en créant et en exécutant un fichier patch_file.sh.
Ligne de commande: ouvrez un terminal, copiez et exécutez les lignes ci-dessous (modifiez les noms de fichier si nécessaire):
diff old.txt new.txt > patch.patch # to create the patch
patch old.txt -i patch.patch -o patched_old.text # to apply patch
Script: en utilisant une approche de fichier .sh. Dans un terminal (clavier: ctrl + alt + t: gedit patch_file.sh
Copiez et collez les commandes qui iraient sur le terminal, dans le fichier .sh et sous l’en-tête, comme indiqué ci-dessous (gedit).
#!/bin/sh
diff old.txt new.txt > patch.patch # to create the patch
patch old.txt -i patch.patch -o patched_old.text # to apply patch
Rendre le script exécutable (terminal):
chmod +x patch_file.sh
Exécutez le script (terminal):
./patch_file.sh # may require Sudo access depending on the directory affected
Vous cherchez sed ou awk. Je trouve que sed est plus simple et que awk est plus puissant.
Voici un exemple de autre question .
sed -i 's/gedit.desktop/yournew.desktop/g' /usr/share/applications/defaults.list
Ça signifie:
/usr/share/applications/defaults.list
gedit.desktop
yournew.desktop
-i
Selon ce que vous devez modifier, si vous connaissez vi
name__, alors ed
NAME _ peut être utile.