Использовать -r
опция для расширенного regexp синтаксиса:
sed -r -e 's/foo|bar/narf/g'
Иначе выйдите из разъединения как \|
:
sed -e 's/foo\|bar/narf/g'
Вот awk сценарий, который пытается произвести достойное добавление отступа. Это предполагает, что вход правильно построен (например, строка прежде 3.2.2
должен быть 3.1
или 3.1.something
, нет 3
).
#! /usr/bin/awk -f
BEGIN { printf "(bookmarks"; depth = 1; }
{
level = split($1, s, ".");
while (level < depth) {--depth; printf ")";}
print "";
depth = level + 1;
gsub(/[\\"]/, "\\&");
page = $NF;
sub(/ +[^ ]*$/,"");
for (i in s) printf " ";
printf "(\"%s\" \"#%s\"", $0, page;
}
END { while (depth-- > 0) printf ")"; print ""; }
Синтаксис DJVU не имеет никакого отношения к XML; это s-выражения.
Любой язык программирования сможет проанализировать Ваш входной пример правильно.
Выберите язык программирования и затем проанализируйте вход deliminating вход сначала "." и "" сначала и "" второй.
Я использовал бы Perl, но независимо от того, что язык, с которым разработчик является самым знакомым, хорошо работал бы.
Следует иметь в виду, что автоматические решения будут только работать, если вход будет следовать за строгим синтаксисом. И если это не известный стандарт, там не будут никакими предварительно сделанными инструментами, преобразовывают это в XML или djvu.
^
(
и$
)
. Не уверенный пренебрежительный, что предложить как sexp симпатичный принтер (значение по умолчанию Emacs не то, что симпатичный), но существуют, конечно, хорошие вокруг. – Gilles 'SO- stop being evil' 21.07.2011, 00:30