Hugo Tags - Bash oneliner

Micha | 29.05.2023

Liste der verwendeten Tags

Eine sortierte und redundanzfreie Liste der bereits verwendeten Tags ist nützlich beim Schreiben eines neuen Artikels bzw. beim Vergeben von Tags. Nichts ist unschöner, als gleiche Tags unterschiedlich geschrieben oder ein Wildwuchs von themenüberlagernden Schlagworten. Mit einem kleinen Einzeiler auf der Kommandozeile kann man sich die Tags ausgeben lassen, die in den bereits vorhandenen Artikeln verwendet wurden. Gestartet wird das Ganze auf Ebene des Blog-Inhaltes.

find . -type f | xargs -i grep -e "^tags:\s*\[" {} | grep -o -e '\".*\"' | sed -e "s/\s*,\s*/\n/g" | sort | uniq
  • Das find listet alle Artikel im Verzeichnis, rekursiv.
  • Das anschließende grep (normalisiert mit xargs) filtert auf die interessanten Zeilen mit den Tags. Wir suchen nur die Zeilen, die mit ’tags: [’ beginnen.
  • Das anschließende grep stellt die Tags, noch Komma-separiert frei, entfernt also Alles vor und nach den Tags.
  • Das anschließende sed ersetzt Kommas durch Zeilenumbruch.
  • Die anschließenden sort und uniq sorgen erst für die Sortierung und dann für das Eliminieren von Dubletten.

Das Ergebnis ist eine zeilenweise Liste aller Tags, eingeschlossen in Anführungszeichen.

"Apple"
"Augenblick"
"Buecher"
"Business"
"Cineast"
"Code"
"Design"
  :

Möchte man die Tags in einer Zeile, kann man den Befehl erweitern und die Linefeeds ersetzen.

find . -type f | xargs -i grep -e "^tags:\s*\[" {} | grep -o -e '\".*\"' | sed -e "s/\s*,\s*/\n/g" | sort | uniq | tr '\n' ' ' | sed '$s/ $/\n/'
  • Das anschließende tr ersetzt die Linefeed wieder durch Leerzeichen.
  • Das abschließende sed ist nur etwas Verschönerung. Es sorgt dafür, dass die letzte Zeile doch wieder mit einem Return beendet wird.

Ergebnis ist eine Zeile mit den Tags.

"Apple" "Augenblick" "Buecher" "Business" "Cineast" "Code" "Design" "Filme" "Fotos" "Gaestebuch" "Gedicht" "Geschichte" "Homepage" "Hugo" "Infos" "Internet" "iPhone" "IT" "Jamstack" "Kitzingen" "Kontakte" "Kunst" "LaTeX" "Leben" "Limitiert" "Linux" "Literatur" "Lokales" "Lyrik" "Lyrik von Micha" "Markdown" "Meinung" "Musik" "News" "OrangeObjects" "Photografie" "Rezension" "Schach" "Shooting" "Spiele" "SSG" "Tipps" "Typographie" "Update" "Verzeichnis" "Zitat"