在下面的文字中,我想将figs/01/
添加到3个文件中的每个文件中。正如您所看到的那样,文件可以是pdf,png还是没有扩展名,有时\includegraphics
会突破几行。
我目前的想法是
cat figs.tex | ruby -ne 'puts $_.gsub(/\\includegraphics\[.*?\]\{.*?\}/) { |x| x.do_something_here }'
但这是鸡与蛋的问题,因为我需要再次搜索要搜索和替换的部分。
问题
有谁能看到如何解决这种情况?
\begin{figure}[ht]
\centerline{ \includegraphics[height=55mm]{plotLn} \includegraphics[height=55mm]{plotLnZoom.pdf}}
\caption{Funktionen $f(x) = \ln(x)$ \ref{examg0} (bl)}
\end{figure}
\begin{example}[Parameterfremstilling for ret linje]\label{tn6.linje}
\begin{think}
Givet linjen $\,m\,$,
\includegraphics[trim=1cm 11.5cm 1cm
11.5cm,width=0.60\textwidth,clip]{vektor8.png}
\end{think}
答案 0 :(得分:1)
您可以一次性读取整个文件(而不是逐行读取文件的默认行为)。为此,您需要切换-0777
(记录分隔符的特殊值)。这解决了分布在多行上的模式问题。
您也可以将-n
选项和puts
替换为-p
以自动打印结果。
ruby -0777 -pe 'gsub(/\\includegraphics\[[^\]]*\]{\K/,"figs/01/")' figs.tex
您可以省略$_
,默认情况下会gsub
应用它。 (您甚至可以留下您的朋友留下-pe
与引用'
之间的空格
关于模式,\K
从匹配结果中删除左边的所有内容,此处的匹配结果只是插入替换字符串的预期位置的空字符串。
请注意,ruby命令行选项来自Perl:
perl -0777 -pe 's!\\includegraphics\[[^\]]*\]{\K!figs/01/!g' figs.tex