Supprimer lignes commentaires et blanches

Supprimer lignes commentaires et blanches

Notes

Afficher le résultat sans modifier le fichier

Sans -i, sed n’écrit que dans le terminal. Le fichier reste intact.

1
sed -E '/^[[:space:]]*(#|$)/d' fichier.yaml

Voir uniquement les lignes qui seraient supprimées

1
sed -n -E '/^[[:space:]]*(#|$)/p' fichier.yaml

Avec les numéros de ligne :

1
grep -nE '^[[:space:]]*(#|$)' fichier.yaml

Comparer avant et après avec diff

1
diff -u fichier.yaml <(sed -E '/^[[:space:]]*(#|$)/d' fichier.yaml)

Les lignes précédées de - sont celles qui seraient supprimées.

Dry-run sur plusieurs fichiers avec find

Le diff pour chaque fichier :

1
2
3
4
5
6
7
find . -type f \( -name '*.yaml' -o -name '*.yml' \) -exec sh -c '
  for f; do
    diff -u "$f" <(sed -E "/^[[:space:]]*(#|\$)/d" "$f") 2>/dev/null \
      || diff -u "$f" - <<EOF
$(sed -E "/^[[:space:]]*(#|\$)/d" "$f")
EOF
  done' sh {} +

Une version plus simple avec bash, qui gère bien <( ) :

1
2
3
4
5
find . -type f \( -name '*.yaml' -o -name '*.yml' \) -print0 |
while IFS= read -r -d '' f; do
  echo "=== $f"
  diff -u "$f" <(sed -E '/^[[:space:]]*(#|$)/d' "$f")
done

Pour compter seulement les lignes qui seraient supprimées dans chaque fichier :

1
2
find . -type f \( -name '*.yaml' -o -name '*.yml' \) \
  -exec grep -cE '^[[:space:]]*(#|$)' {} +

Vérifier que le YAML reste valide avant d’appliquer

1
sed -E '/^[[:space:]]*(#|$)/d' fichier.yaml | yq . >/dev/null && echo "YAML valide"

Quand le résultat vous convient, relancez la même commande avec -i (ou -i.bak pour garder une sauvegarde).