Как мне разобрать Tiddlywiki в кучу простых текстовых файлов?
Я нашел плагин Tiddlywiki для экспорта всех тиддлеров в один простой текстовый файл, но я хочу взять свой файл Tiddlywiki и экспортировать отдельные тиддлеры в отдельные текстовые файлы (позже для переноса в notes.vim). Есть ли простой способ сделать это с помощью bash или vim?
Файл Tiddlywiki содержит форматирование / синтаксис, подобный этому:
<div title="Anthony Wallace" creator="Jon" modifier="Jon" created="201104020927" changecount="1" tags="anthropologists, mythology">
и я хочу проанализировать содержимое div и создать файл с именем "Энтони Уоллес" с первыми двумя строками:
Энтони Уолас
@anthropologists @mythology
2 ответа
Этот скрипт должен делать это, в любом случае, с некоторыми допущениями. Например, он сломается, если атрибуты в div
тег содержит закрывающую угловую скобку ( >
), если порядок title
а также creator
изменения атрибутов, или если div
тег занимает несколько строк.
#!/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 +x
это и вызов с именем входного файла в качестве аргумента. Как таковой, он создаст свой выходной файл в текущем каталоге, поэтому будьте осторожны.
Если ваши входные файлы структурированы в дереве каталогов, вам может потребоваться найти правильную командную строку с подстановочными знаками оболочки, циклами или find
полезность.
Примечание: gensub - это расширение gawk для awk, поэтому первая строка должна быть
#!/usr/bin/gawk -f
В некоторых версиях TiddlyWiki строки выглядят так (строка 4):
/<div title=".*" modifier=".*"/
Я хотел извлечь все тиддлеры в один HTML-файл, поэтому я удалил все перенаправления в файл 'name' и добавил этот верхний и хвостовой код:
BEGIN { print("<html>") }
END { print("</html>") }
Действительно полезный код, показывает силу awk! Большое спасибо, Питер