infile.tex
次の形式のファイルがあります(例:)。
AAAA
BBBB AAAA
CCCC BBBB AAAA
%%## Just some text
\begin{example}[foobar]
\begin{Sinput}
> set.seed(271)
> U <- runif(10)
> plot(U, 1-U)
\end{Sinput}
AAAA BBBB CCCC
\begin{Sinput}
> plot(qnorm(cbind(U, 1-U)))
\end{Sinput}
\end{example}
私%%##
そして\begin{Sinput}
\end{Sinput}
と so の間のすべての行
%%## Just some text
\begin{Sinput}
> set.seed(271)
> U <- runif(10)
> plot(U, 1-U)
\end{Sinput}
\begin{Sinput}
> plot(qnorm(cbind(U, 1-U)))
\end{Sinput}
私は次のように働いてみますsed
:
sed -n '/%%##\|\\begin{Sinput}/,/\\end{Sinput}/p' infile.tex
#また含まれています\begin{example}[foobar]
sed -n '/^%%##\|\\begin{Sinput}/,/\\end{Sinput}/p' infile.tex
#ただし、次から始まる行は含めないでください。%%##
注:上記の内容の一部は、以下から派生しています。ここ。また、「2段階」ソリューション(最初に始まるすべての行を抽出してからすべてのブロックを抽出すること)も可能です。 (方法はわかりませんが、sed
複数の「パターン」を選択できるようですので、以下を参照してください。もう少しエレガントに見えます)
ベストアンサー1
awk
範囲演算子(、)はこれに非常に効果的です。最後に追加のフィルタ(;)を表示して急いでください。
awk '/^\\begin\{Sinput\}/,/^\\end\{Sinput\}/;/^%%##/' infile.tex
%%## Just some text
\begin{Sinput}
> set.seed(271)
> U <- runif(10)
> plot(U, 1-U)
\end{Sinput}
\begin{Sinput}
> plot(qnorm(cbind(U, 1-U)))
\end{Sinput}