J'essaye de décommenter le contenu d'un fichier en utilisant sed mais avec regex (par exemple: [0-9] {1,5})
# one two 12
# three four 34
# five six 56
Ce qui suit fonctionne:
sed -e 's/# one two 12/one two 12/g' /file
Cependant, ce que je voudrais, c'est utiliser un motif d'expression régulière pour remplacer toutes les correspondances sans entrer de chiffres mais garder les chiffres dans le résultat.
Pour répondre à un exemple de question, simplement
sed 's/^# //' file
suffira, mais s'il est nécessaire de supprimer le commentaire uniquement sur certaines lignes contenant une expression rationnelle particulière, alors vous pouvez utiliser conditionnel adresse:
sed '/regex/s/^# //' file
Ainsi, toutes les lignes contenant regex
seront sans commentaires (si la ligne commence avec un #
)
... où regex
pourrait être [0-9]$
comme:
sed '/[0-9]$/s/^# //' file
supprimera #
au début des lignes contenant un nombre comme dernier caractère.
sed -e 's/^#\s*\(.*[0-9].*\)$/\1/g' filename
devrait le faire.
Si vous ne voulez que les lignes non commentées qui contiennent des nombres, vous pouvez utiliser ceci:
sed -e 's/^#\s*\(.*[0-9]+.*\)/\1/g' file
Est le -i
option de remplacement dans le fichier respectif pas nécessaire? J'arrive à supprimer le premier #
en utilisant ce qui suit:
sed -i "s/^# \(.*\)/\1/g" file
Afin de ne commenter que les lignes commentées qui se terminent par une séquence d'au moins un chiffre, je l'utiliserais comme ceci:
sed -i "s/^# \(.*[[:digit:]]\+$\)/\1/g" file
Cette solution nécessite que les lignes commentées commencent par un seul espace (juste derrière le #
), mais cela devrait être facile à régler s'il n'est pas applicable.
La commande sed
suivante décommentera les lignes contenant des nombres:
sed 's/^#\s*\(.*[0-9]\+.*$\)/\1/g' file