GNU/Linux >> Tutoriels Linux >  >> Linux

Ajouter une ligne à un fichier uniquement s'il n'existe pas déjà

Restez simple :)

grep + écho devrait suffire :

grep -qxF 'include "/configs/projectname.conf"' foo.bar || echo 'include "/configs/projectname.conf"' >> foo.bar
  • -q tais-toi
  • -x correspondre à toute la ligne
  • -F le motif est une chaîne simple
  • https://linux.die.net/man/1/grep

Edit :incorporé les suggestions de @cerin et @thijs-wouters .


Essayez ceci :

grep -q '^option' file && sed -i 's/^option.*/option=value/' file || echo 'option=value' >> file

Ce serait une solution propre, lisible et réutilisable en utilisant grep et echo pour ajouter une ligne à un fichier uniquement s'il n'existe pas déjà :

LINE='include "/configs/projectname.conf"'
FILE='lighttpd.conf'
grep -qF -- "$LINE" "$FILE" || echo "$LINE" >> "$FILE"

Si vous devez faire correspondre toute la ligne, utilisez grep -xqF

Ajouter -s pour ignorer les erreurs lorsque le fichier n'existe pas, en créant un nouveau fichier avec uniquement cette ligne.


Linux
  1. Le fichier de métadonnées ne correspond pas à la somme de contrôle - erreur YUM !

  2. Comment Gzip uniquement si Thesqldump ne génère pas d'erreur ?

  3. Comment Greper les lignes qui ne commencent pas par "#" ou ";" ?

  4. Exécutez la tâche cron uniquement si elle n'est pas déjà en cours d'exécution

  5. open() en Python ne crée pas de fichier s'il n'existe pas

Visual File Diff avec Vimdiff – Cela fait une différence !

Comment faire en sorte que GREP ne sélectionne que des valeurs numériques ?

La commande Linux sed ne modifie pas le fichier cible

grep sans afficher le chemin/fichier :ligne

Pourquoi wget'ing une image me donne-t-il un fichier, pas une image ?

Grep dans un énorme fichier journal (> 14 Go) uniquement les derniers x Go ?