J'ai le fichier de test suivant
AAA
BBB
CCC
En utilisant le fichier sed suivant, je peux commenter la ligneBBB.
# sed -e '/BBB/s/^/#/g' -i file
Je voudrais commenter la ligne si elle n'a pas déjà un # au début.
# sed -e '/^#/! /BBB/s/^/#/g' file
sed: -e expression #1, char 7: unknown command: `/'
Des idées comment je peux réaliser ceci?
En supposant que vous n’ayez aucune ligne avec plusieurs #
s, cela fonctionnerait:
sed -e '/BBB/ s/^#*/#/' -i file
Remarque: vous n’avez pas besoin de/g puisque vous effectuez au maximum une substitution par ligne.
Je trouve cette solution pour fonctionner au mieux.
sed -i '/![^#]/ s/\(^.*BBB.*$\)/#\ \1/' file
Peu importe le nombre de "#" symboles, il n’en ajoutera jamais un autre. Si le modèle que vous recherchez n'inclut pas de "#", il sera ajouté au début de la ligne et un espace de fin sera ajouté.
Si vous ne voulez pas d'espace de fuite
sed -i '/![^#]/ s/\(^.*BBB.*$\)/#\1/' file
Une autre solution avec le caractère spécial &
qui fait référence à la totalité de la portion correspondante de l'espace de modèle. C'est un peu plus simple et plus propre que de capturer et de référencer un groupe d'expressions rationnelles.
sed -i 's/^[^#]*BBB/#&/' file