Supprimer toutes les lignes commençant par un # d'un fichier
Toutes les lignes avec des commentaires dans un fichier commencent par #
. Comment puis-je supprimer toutes les lignes (et seulement les lignes) qui commencent par #
? Les autres lignes contenant #
, mais pas au début de la ligne doivent être ignorées.
8 réponses
Cela peut être fait avec un sed one-liner:
sed '/^#/ d'
Cela dit: "Trouvez toutes les lignes qui commencent par # et supprimez-les, en laissant tout le reste."
Je suis un peu surpris que personne n'ait 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 que tout, depuis un #
jusqu'à la fin d'une ligne, doit être traité comme un commentaire:
sed 's/#.*$//' filename
Bien que cela traite, par exemple, un caractère #
dans un littéral de chaîne comme le début d'un commentaire (qui peut ou non être pertinent pour votre cas) (et il laisse des lignes vides).
Une ligne commençant par arbitraire les espaces suivis de #
peuvent également être traités comme un commentaire:
grep -v '^ *#' filename
Si les espaces sont uniquement des espaces, ou
grep -v '^[ ]#' filename
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'argument filename
à lire à partir de l'entrée standard (par exemple, dans le cadre d'un tuyau).
Le contraire de la solution de Raymond:
sed -n '/^#/!p'
"n'Imprimez rien, sauf pour les lignes qui ne commencent pas par #"
Vous pouvez utiliser ce qui suit pour une solution awk -
awk '/^#/ {sub(/#.*/,"");getline;}1' inputfile
Cette réponse s'appuie sur la précédente réponse par Keith.
egrep -v "^[[:blank:]]*#"
devrait filtrer les lignes de commentaire.
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 .
, Vous pouvez modifier directement votre fichier avec
sed -i '/^#/ d'
Si vous voulez également supprimer les lignes de commentaire qui commencent par des espaces, utilisez
sed -i '/^\s*#/ d'
Généralement, vous voulez garder la première ligne de votre script, si c'est un sha-bang, donc sed
ne doit pas supprimer les lignes commençant par #!
. en outre, il devrait supprimer des lignes, qui contiennent seulement un hachage mais pas de texte. mettez tout cela ensemble:
sed -i '/^\s*\(#[^!].*\|#$\)/d'
Pour supprimer le symbole de commentaire (#) mais garder le reste de la ligne et garder le SHA-bang:
awk '{ if( ($0 !~ /^ *#/) || ($0 ~ /^ *#!/) ) print $0 ; else {gsub(/^ *#/ , "" ); print } } ' teste.sh nter code here
Voici avec une boucle pour tous les fichiers avec une extension:
ll -ltr *.filename_extension > list.lst
for i in $(cat list.lst | awk '{ print $8 }') # validate if it is the 8 column on ls
do
echo $i
sed -i '/^#/d' $i
done