我正在尝试使用 sed 将 wiki 文本转换为 latex 代码。我快完成了,但我想自动生成图形标签,如下所示:
[[Image(mypicture.png)]]
...进入:
\includegraphics{mypicture.png}\label{img-1}
对于我想继续使用 sed 的事情。我当前使用的正则表达式和 bash 代码如下:
__tex_includegraphics="\\\\includegraphics[width=0.95\\\\textwidth]{$__images_dir\/"
__tex_figure_pre="\\\\begin{figure}[H]\\\\centering$__tex_includegraphics"
__tex_figure_post="}\\\\label{img-$__images_counter}\\\\end{figure}"
sed -e "s/\[\[Image(\([^)]*\))\]\].*/$__tex_figure_pre\1$__tex_figure_post/g"\
...但我无法增加该计数器。有什么想法吗?
从更一般的角度来看,我的问题如下:我可以在 sed 中使用反向引用来创建对于 sed 的每个匹配都不同的替换吗?这是,每次sed匹配模式时,我可以使用\1作为函数的输入并使用这个函数的结果作为替换吗?
我知道这是一个棘手的问题,我可能必须使用 AWK 来解决这个问题。但是,如果有人有解决方案,我将不胜感激他或她的帮助。
最佳答案
这可能对你有用(GNU sed):
sed -r ':a;/'"$PATTERN"'/{x;/./s/.*/echo $((&+1))/e;/./!s/^/1/;x;G;s/'"$PATTERN"'(.*)\n(.*)/'"$PRE"'\2'"$POST"'\1/;ba}' file
这会查找 shell 变量中包含的 PATTERN,如果不存在则打印当前行。如果存在该模式,则它会递增或启动保留空间中的计数器,然后将所述计数器附加到当前行。然后使用 shell 变量 PRE 和 POST 以及计数器替换该模式。最后,检查当前行是否存在该模式的进一步情况,并在必要时重复该过程。
关于regex - Sed 动态反向引用替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19203447/