Toutes les lignes contenant des commentaires dans un fichier commencent par #
. Comment puis-je supprimer toutes les lignes (et uniquement les lignes) qui commencent par #
? Les autres lignes contenant #
, mais pas au début de la ligne, doivent être ignorées.
Réponses
Trop de publicités?Cela peut être fait avec un sed one-liner :
sed '/^#/ d'
Cela dit, "trouvez toutes les lignes commençant par # et supprimez-les en laissant tout le reste".
Je suis un peu surpris que personne n'a suggéré la solution la plus évidente:
grep -v '^#' filename
Cela résout le problème comme indiqué.
Mais notez qu'une convention commune est pour tout à partir d'un #
à la fin d'une ligne, pour être considérée comme un commentaire:
sed 's/#.*$//' filename
bien que la traite, par exemple, un #
de caractères dans une chaîne littérale comme le début d'un commentaire (qui peuvent ou peuvent ne pas être pertinents pour votre cas) (et il laisse des lignes vides).
Une ligne de départ arbitraire d'espaces, suivi par #
peut également être considérée comme un commentaire:
grep -v '^ *#' filename
si les espaces sont seulement des espaces, ou
grep -v '^[ ]#' filename
où les deux espaces sont en fait un espace suivi d'un littéral caractère de tabulation (de type "contrôle-v tab").
Pour toutes ces commandes, omettre l' filename
argument de lire l'entrée standard (par exemple, dans le cadre d'une pipe).
Cette réponse s'appuie sur la précédente réponse par Keith.
egrep -v "^[[:blank:]]*#"
doivent filtrer les lignes de commentaire.
egrep -v "^[[:blank:]]*(#|$)"
devrait filtrer les commentaires et les lignes vierges, comme c'est souvent utile.
Pour plus d'informations sur [:blank:]
et les autres classes de caractères, reportez-vous à https://en.wikipedia.org/wiki/Regular_expression#Character_classes.