データ
7. Masi is the same as
\begin{enumerate}
A
B
ABC ha lorem
\end{enumerate}
1. ABC is
\begin{enumerate}
P
B
Lorem maam
\end{enumerate}
私は〜になりたい
7. Masi is the same as
\begin{enumerate}
\item A
\item B
\item ABC ha lorem
\end{enumerate}
1. ABC is
\begin{enumerate}
\item P
\item B
\item Lorem maam
\end{enumerate}
私の開始正規表現は以下に基づいています。回答
perl -000pe s/\n/\n\\begin{enumerate}\n [A-Za-z1-9]* \end{enumerate}/ ... [problem here!] masi.tex
どこ
- -000:各質問が1行として処理されるように、「行」を2つの連続する改行(\ n \ n)として定義するPerlの短絡モードを有効にします。
- -pe : 入力ファイルの各行を読み込み、-e(-p) に渡されたスクリプトを適用して印刷します。
\item
一致する各行の先頭を.My疑似コードに置き換えたいと思います。問題はここのコードにあります
s/\n/\project/g
列挙コンテキストで項目を適用します。
どのように
答え1
あなたは使用することができます..
または範囲オペレータは交換を開始/終了部分に制限します。
while (<DATA>) {
if ( /\\begin/ .. /\\end/ ) {
s/^(?!\\)/\\item /;
}
print;
}
__DATA__
7. Masi is the same as
\begin{enumerate}
A
B
ABC ha lorem
\end{enumerate}
1. ABC is
\begin{enumerate}
P
B
Lorem maam
\end{enumerat
コマンドラインスクリプトを好む場合:
perl -ne 'if (/\\begin/../\\end/) {s/^(?!\\)/\\item /};print'
または暗黙的に短いものを使用してくださいprint
。
perl -pe 'if (/\\begin/../\\end/) {s/^(?!\\)/\\item /}'
これは(?!...)
否定的な配信の主張です。
答え2
別のPerl
解決策:
$ perl -pe '
if (/\\begin/../\\end/) {
next if /\\begin/ || /\\end/;
s/^/\\item /;
}
' file
7. Masi is the same as
\begin{enumerate}
\item A
\item B
\item ABC ha lorem
\end{enumerate}
1. ABC is
\begin{enumerate}
\item P
\item B
\item Lorem maam
\end{enumerate}
説明する
if (/\\begin/../\\end/)
:行区切り記号はで始まり\begin
、終了します\end
。next if /\\begin/ || /\\end/
:開始と終了は必要ありませんので省略してください。s/^/\\item /
:各行の先頭を目的のパターンに置き換えます。-p
perl
オプションを使用すると、各行を処理した後に印刷されます。
答え3
フラグを使用してください。 enumerateと入力すると1に設定され、最後から0にクリアされます。フラグ設定時の項目の挿入:
perl -pe '$inside = 0 if /\\end{enumerate}/;
print "\\item " if $inside;
$inside = 1 if /\\begin{enumerate}/;
' input.tex
印刷する前に終了を確認するので、\item
終了行の前には追加されません。