TUTOS.EU

Modifier un fichier de configuration avec SED sous Linux

Modifier un paramètre d'un fichier en ligne de commande

Dans le fichier /etc/login.defs

Chercher une ligne qui commence par PASS_MIN_DAYS
on efface complètement la ligne et on la remplace par PASS_MIN_DAYS 0

sudo sed -i 's/^PASS_MIN_DAYS.*/PASS_MIN_DAYS   0/' /etc/login.defs
Lien vers le fichier : cliquez ici Copier le code

Anciennement j'avais aussi cet exemple que je trouve moins lisible :

Dans le fichier /etc/monappli/messettings.yml

Chercher une ligne qui commence par use_bg_workers:
on efface complètement la ligne et on la remplace par

use_bg_workers: 'true'

sed -i '/^use_bg_workers:/c\use_bg_workers: '\''true'\''' /etc/monappli/messettings.yml
Lien vers le fichier : cliquez ici Copier le code

Pour remplacer un mot par un autre avec SED

sed -i 's/ancienmot/nouveaumot/g' monfichier.txt
Lien vers le fichier : cliquez ici Copier le code

En bonus, sur blog.courtine.org j'ai encore vu une autre syntaxe pour remplacer D /tmp par |#D /tmp

sed -i -e 's|D /tmp|#D /tmp|g' /usr/lib/tmpfiles.d/tmp.conf
Lien vers le fichier : cliquez ici Copier le code

En cherchant un peu, si on décortique :

-i indique  qu'il faut modifier directement (in-place) le fichier

-e script, --expression=script donc on fourni une expression à traiter

 

L'expression à traiter est 's|D /tmp|#D /tmp|g'

Le s signifie qu'il faut faire une substitution. Les | sont des délimiteurs. A priori / aurait aussi fonctionner pour délimiter;

 

On va remplacer D /tmp par #D /tmp

 

Le g situé à la fin veut dire "globalement". Toutes les occurrences de la chaîne de recherche dans chaque ligne doivent être remplacées, et non seulement la première occurrence.


2