考虑这个输入:
$ 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}
这使用=~
which 是 Bash 的正则表达式匹配运算符。匹配结果保存到一个名为 的数组中$BASH_REMATCH
。第一个捕获组存储在索引 1 中,第二个(如果有)存储在索引 2 中,依此类推。索引 0 是完全匹配。