我需要翻译;
\verbatiminput{code.R}
进入
\begin{verbatim}
#### Hello world ####
print ("hello world")
#####################
\end{verbatim}
这就是放置文件code.R
的内容而不是路径。
一个解决方案是;
perl -pe 's{\\verbatiminput\{(.*?)\}}{local$/;open F,"<$1";"\\begin{verbatim}".<F>}ge'
\end{verbatim}
?答案 0 :(得分:0)
我还没有测试过,但我会像这样重写(实际上我可能会以脚本而不是单行编写)
local $/
perl -pe 's#\\verbatiminput{(.*?)}#local $/;open(F,"<$1");join(q(),q(\begin{verbatim}"),<F>,q(\end{verbatim})#ge'
答案 1 :(得分:0)
如果您的sed
支持e
修饰符,则可以执行以下操作:
$ cat testdata
foo
\verbatiminput{file1}
bar
\verbatiminput{file2}
quux
$ sed -e 's#\\verbatiminput{\([^}]*\)}#echo "\\begin{verbatim}";cat "\1";echo "\\end{verbatim}"#ge' testdata
foo
\begin{verbatim}
this
is
file1
\end{verbatim}
bar
\begin{verbatim}
this
is
file2
\end{verbatim}
quux
答案 2 :(得分:0)
考虑这个输入:
$ cat input
some line 1
some line 2
\verbatiminput{code.R}
some line 3
\verbatiminput{code1.R}
$ cat code.R
#### Hello world ####
print ("hello world")
#####################
$ cat code1.R
#### Goodby world ####
print ("goodby world")
#####################
以及以下bash脚本:
#!/bin/bash
regex='^\verbatiminput\{(.*)\}$'
while read line
do
if [[ $line =~ $regex ]]
then
file="${BASH_REMATCH[1]}"
echo \\begin{verbatim}
cat $file
echo \\end{verbatim}
else
echo $line
fi
done < input
这将给出以下输出:
some line 1
some line 2
\begin{verbatim}
#### Hello world ####
print ("hello world")
#####################
\end{verbatim}
some line 3
\begin{verbatim}
#### Goodby world ####
print ("goodby world")
#####################
\end{verbatim}
这使用=~
,这是Bash的正则表达式匹配运算符。匹配结果将保存到名为$BASH_REMATCH
的数组中。第一个捕获组存储在索引1中,第二个(如果有)存储在索引2中,等等。索引零是完全匹配。