Toutes les lignes contenant des commentaires dans un fichier commencent par #
. Comment puis-je supprimer toutes les lignes (et uniquement ces lignes) qui commencent par #
? Les autres lignes contenant #
, mais pas au début de la ligne, doivent être ignorées.
182
#blah \<nl>blah
compte comme une seule «ligne logique» car la barre oblique inverse échappe à la nouvelle ligne?make
, quels utilitaires utilisent les 'lignes d'épissure anti- slash avant de terminer un commentaire'? Les shells (testés bash et ksh) ne le font pas. C et C ++ gèrent l'épissage de nouvelle ligne avant tout autre traitement des directives de préprocesseur, mais ce sont des directives plutôt que des commentaires.\<nl>
fuite commune fonctionnerait également sur les commentaires. Mais wow j'avais tort. Je n'ai pas encore trouvé d'autre exemple ... :) Merci!Réponses:
Cela peut être fait avec un sed one-liner :
Cela dit, "trouvez toutes les lignes qui commencent par # et supprimez-les, laissant tout le reste."
la source
sed /^#/d
sed '/^#/ d' < inputFile.txt > outputFile.txt
sed -i '/^#/d' filepath
.sed -i '' '/^#/d' filepath
sur Mac ( car le suffixe -i est obligatoire )awk '/^#/ && !first { first=1 ; next } { print $0}'
Je suis un peu surpris que personne n'ait suggéré la solution la plus évidente:
Cela résout le problème comme indiqué.
Mais notez qu'une convention commune veut que tout, de a
#
à la fin d'une ligne, soit traité comme un commentaire:bien que cela traite, par exemple, un
#
caractère dans une chaîne littérale comme le début d'un commentaire (qui peut ou non être pertinent pour votre cas) (et cela laisse des lignes vides).Une ligne commençant par un espace blanc arbitraire suivi de
#
peut également être traitée comme un commentaire:si les espaces ne sont que des espaces, ou
où les deux espaces sont en fait un espace suivi d'un caractère de tabulation littéral (tapez "control-v tab").
Pour toutes ces commandes, omettez l'
filename
argument à lire à partir de l'entrée standard (par exemple, dans le cadre d'un tube).la source
grep -v "^#" filename
Le contraire de la solution de Raymond:
"n'imprimez rien, sauf pour les lignes qui ne commencent PAS par #"
la source
vous pouvez directement éditer votre fichier avec
Si vous souhaitez également supprimer les lignes de commentaires commençant par des espaces, utilisez
Habituellement, vous souhaitez conserver la première ligne de votre script, s'il s'agit d'un sha-bang,
sed
ne supprimez donc pas les lignes commençant par#!
. il devrait également supprimer les lignes, qui ne contiennent qu'un hachage mais pas de texte. mets le tout ensemble:Pour être conforme à toutes les variantes de sed, vous devez ajouter une extension de sauvegarde à l'
-i
option:la source
Vous pouvez utiliser ce qui suit pour une solution awk -
la source
Cette réponse s'appuie sur la réponse précédente de Keith .
egrep -v "^[[:blank:]]*#"
devrait filtrer les lignes de commentaires.egrep -v "^[[:blank:]]*(#|$)"
devrait filtrer les commentaires et les lignes vides, comme cela est souvent utile.Pour plus d'informations sur
[:blank:]
et d'autres classes de caractères, reportez-vous à https://en.wikipedia.org/wiki/Regular_expression#Character_classes .la source
egrep
soutenez cette syntaxe; les anciennes versions pourraient ne pas l'être.Le voici avec une boucle pour tous les fichiers avec une extension:
la source