Les lignes du fichier:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 2000 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 2001 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 2002 -j ACCEPT
pour commenter disons la ligne qui contient
2001
je peux simplement exécuter cette commande SED:
sed -i '/ 2001 /s/^/#/' file
mais maintenant comment revenir en arrière?
comme en commentant cette même ligne?
j'ai essayé
sed -i '/ 2001 /s/^//' file
cela ne fonctionne pas.
Essayez cette commande sed
,
sed -i '/^#.* 2001 /s/^#//' file
Oui, pour commenter une ligne contenant une chaîne spécifique avec sed, faites simplement:
sed -i '/<pattern>/s/^/#/g' file
Et pour le décommenter:
sed -i '/<pattern>/s/^#//g' file
Dans ton cas:
sed -i '/2001/s/^/#/g' file (to comment out)
sed -i '/2001/s/^#//g' file (to uncomment)
L'option "g" à la fin signifie un changement global. Si vous ne souhaitez modifier qu'une seule instance de modèle, ignorez simplement cela.
Pour compléter @ la réponse utile d'Avinash Raj avec un plus générique , conforme POSIX solution.
Notez que la solution est basée sur awk
, car une solution robuste portable avec sed
est pratiquement impossible en raison des limitations des expressions régulières POSIX ' basique.
awk -v commentId='#' -v Word='2001' '
$0 ~ "(^|[[:punct:][:space:]])" Word "($|[[:punct:][:space:]])" {
if (match($0, "^[[:space:]]*" commentId))
$0 = substr($0, RSTART + RLENGTH)
else
$0 = commentId $0
}
{ print }
' file > tmpfile.$$ && mv tmpfile.$$ file
(^|[[:punct:][:space:]])
et ($|[[:punct:][:space:]])
sont les équivalents regex étendus POSIX du \<
et \>
Affirmations de limites de mots connues d'autres dialectes d'expression régulière.awk
n'offre pas de mise à jour sur place (pas plus que POSIX sed
, d'ailleurs), donc la sortie est d'abord capturée dans un fichier temporaire et ce fichier remplace ensuite l'original en cas de succès.Pour mac, qui ne prend pas en charge les paramètres sed standard, cela supprimerait le hashtag
sed -i "" "/.*#.*d\/docker-php-ext-xdebug\.ini.*/s/^#//g" docker-compose.yml
Exemple rapide de comment commenter et commenter une ligne dans un fichier.
Exemple de fichier:
umask 027
TMOUT=600
Permet maintenant de sauvegarder le fichier (juste pour rire) et de commenter et de commenter:
# backup file (because we should always do this)
cp /etc/bash.bashrc /etc/bash.bashrc.$(date '+%Y-%m-%d,%H:%M:%S')
# original: TMOUT=600 , result :# TMOUT=600
sed -i '/[^#]/ s/\(^TMOUT=600.*$\)/#\ \1/' /etc/bash.bashrc
# original # TMOUT=600 ,result :TMOUT=600
sed -i '/^#.*TMOUT=600.*$/s/^#\ //' /etc/bash.bashrc