Wie kann ich ein Tiddlywiki in eine Reihe von reinen Textdateien parsen?

1527
Jonathan

Ich habe ein Tiddlywiki-Plugin gefunden, um alle Tiddler in eine reine Textdatei zu exportieren, aber ich möchte meine Tiddlywiki-Datei verwenden und die einzelnen Tiddler in einzelne Textdateien exportieren (die später in notes.vim migriert werden sollen). Gibt es eine einfache Möglichkeit, dies mit bash oder vim zu tun?

Die Tiddlywiki-Datei enthält folgende Formatierungen / Syntax:

<div title="Anthony Wallace" creator="Jon" modifier="Jon" created="201104020927" changecount="1" tags="anthropologists, mythology">

und ich möchte den Div-Inhalt analysieren und macht eine Datei namens "Anthony Wallace" mit den ersten beiden Zeilen:

Anthony Walace

@ Anthropologen @Mythologie

1

2 Antworten auf die Frage

1
peth

Dieses Skript sollte es unter einigen Voraussetzungen trotzdem tun. Beispielsweise wird es beschädigt, wenn Attribute im divTag eine schließende Klammer ( >) enthalten, wenn sich die Reihenfolge der Attribute titleund creatorändert, oder wenn das divTag mehrere Zeilen umfasst.

#!/usr/bin/awk -f  # treat the opening tag line here /<div title=".*" creator=".*"/ { indiv = 1 # inside div from here on name = gensub(/.* title="([^"]+)".*/, "\\1", "") # extract name tagsattr = gensub(/.* tags="([^"]+)".*/, "\\1", "") # extract tags string split(tagsattr, tags, /, /) # split tags into array  print(name) > name # print name into file "name" for(tag in tags) printf("@%s ", tags[tag]) >> name # print tags with "@" prefix printf("\n\n") >> name # two newlines sub(/.*<div [^>]+>/, "") # remove the tag so the rest # of the line can be printed }  # treat closing line indiv == 1 && /<\/div>/ { sub(/<\/div>.*/, "") # remove tag so the rest print >> name # can be printed indiv = 0 # outside div from here on }  # print all other lines inside of div indiv == 1 { print >> name } 

chmod +xes und Aufruf mit Namen der Eingabedatei als Argument. In diesem Fall wird die Ausgabedatei im aktuellen Verzeichnis erstellt. Seien Sie also vorsichtig.

Wenn Ihre Eingabedateien in einer Verzeichnisstruktur strukturiert sind, müssen Sie möglicherweise die richtige Befehlszeile mit Shell-Platzhaltern, Schleifen oder dem findDienstprogramm finden.

1
peterthevicar

Hinweis gensub ist eine Erweiterung für awk, also sollte die erste Zeile wirklich sein

#!/usr/bin/gawk -f 

Bei einigen Versionen von TiddlyWiki sehen die Zeilen folgendermaßen aus (Zeile 4):

/<div title=".*" modifier=".*"/ 

Ich wollte alle Tiddlers in eine HTML-Datei extrahieren, also entfernte ich alle Umleitungen in die 'Name' -Datei und fügte den folgenden Code hinzu:

BEGIN { print("<html>") } END { print("</html>") } 

Wirklich hilfreicher Code, zeigt die Kraft von awk! Vielen Dank, Peter