결과

결과

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}

답변2

sed -e '/^\\begin{Sinput}/,/^\\end{Sinput}/!{/^%%##/!d}'

perl -lne 'print if /^\Q\begin{Sinput}/ .. /^\Q\end{Sinput}/ or /^%%##/'

range의 연산자 Perl는 입니다 . 특수 문자를 명시적으로 이스케이프할 필요가 없도록 ..다음 텍스트를 인용하기 위해 따옴표를 사용합니다 .\Q

결과

%%## 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}

관련 정보