GNU/Linux >> Tutoriels Linux >  >> Linux

sed :comment remplacer la ligne si elle est trouvée ou ajouter à la fin du fichier si elle n'est pas trouvée ?

C'est en fait assez simple avec sed :si une ligne correspond, copiez-la simplement dans le h ancien espace puis s remplacer la valeur.
Sur la route$ t ligne ex changez l'espace de maintien et l'espace de motif puis vérifiez si ce dernier est vide. S'il n'est pas vide, cela signifie que la substitution a déjà été effectuée, donc rien à faire. S'il est vide, cela signifie qu'aucune correspondance n'a été trouvée. Remplacez donc l'espace de modèle par la variable=value souhaitée. puis ajouter à la ligne actuelle dans le tampon de maintien. Enfin, ex modifier à nouveau :

sed '/^FOOBAR=/{h;s/=.*/=newvalue/};${x;/^$/{s//FOOBAR=newvalue/;H};x}' infile

Ce qui précède est gnu sed syntaxe. Portatif :

sed '/^FOOBAR=/{
h
s/=.*/=newvalue/
}
${
x
/^$/{
s//FOOBAR=newvalue/
H
}
x
}' infile

Cela peut probablement être raccourci. Ce n'est pas une seule commande sed et elle utilise également grep, mais cela semble être essentiellement ce que vous voulez. C'est une seule ligne, et il édite le fichier sur place (pas de fichiers temporaires).

grep -q "^FOOBAR=" file && sed "s/^FOOBAR=.*/FOOBAR=newvalue/" -i file || 
    sed "$ a\FOOBAR=newvalue" -i file

Voici un sed plus simple approche, car je ne trouve pas sed hold space facile à travailler. Si vous êtes à l'aise avec hold space , l'utilisation de l'approche don_crissti offre une possibilité supplémentaire de préserver quoi que ce soit de la ligne existante, mais cela est généralement très rare.

Dans cette approche, vous imprimez tout sauf la ligne que vous souhaitez supprimer, puis à la fin, ajoutez le remplacement.

sed -n -e '/^FOOBAR=/!p' -e '$aFOOBAR=newvalue' infile

Linux
  1. Comment ajouter facilement du texte à la fin du fichier sous Linux

  2. Comment ajouter plusieurs lignes à un fichier ?

  3. fichier :commande introuvable

  4. Comment remplacer sed comme texte par python?

  5. script bash ajoute du texte à la première ligne d'un fichier

Comment lire un fichier ligne par ligne dans Bash

Comment supprimer des lignes d'un fichier à l'aide de la commande Sed

Comment remplacer une chaîne dans un ou plusieurs fichiers ?

Comment insérer du texte avant la première ligne d'un fichier ?

Tutoriel Unix Sed :ajouter, insérer, remplacer et compter les lignes de fichiers

Comment utiliser Sed pour rechercher et remplacer une chaîne dans un fichier