テキストから特定のラテックスコマンドと次の閉じ括弧を削除します。

テキストから特定のラテックスコマンドと次の閉じ括弧を削除します。

テキストから特定のlatexコマンドを削除し、その後に閉じる角かっこを追加しますが、角かっこ内にテキストを保持するにはどうすればよいですか?次の例から削除するコマンドはです\edit{<some staff>}。削除し、\edit{変更しないでください。}<some staff>

SED、AWK、Perl、またはそのタスクを実行できるすべてのものを自由に提案してください。

無意味な例:

We \edit{Introduce a} model for analyzing \emph{data} from various
experimental designs, \edit{such as paired or \url{http://www/}
longitudinal; as was done 1984 by NN \cite{mycitation} and by NNN
\cite{mycitation2}}.

\command{smth}ステートメント内のフォームには、1つ以上のLatexコマンドを含めることができます\edit{}\command{smth} そのまま残らなければならない

出力:

We Introduce a model for analyzing \emph{data} from various
experimental designs, such as paired or \url{http://www/}
longitudinal; as was done 1984 by NN \cite{mycitation} and by NNN
\cite{mycitation2}.

PS。私のテキストファイルに多くの小さな修正を加えます。共同編集者が見ることができるように、これらの編集内容を強調表示したいと思います。しかし、強調表示をすべて削除し、テキストをレビュー担当者に送信したいと思います。

この質問はもともと以下から提起された。AWK/SED は、テキストから特定の Latex コマンドを削除し、その後に閉じる括弧を追加します。。たとえば、とても柔らかいです。

ベストアンサー1

\edit{...}以下は、最大レベルのコマンドを使用して単純な場合に機能するコマンドです。

perl -00 -lpe 's,\\edit\{( (?: [^}\\]* | \\[a-z]+\{[^}]*\} )+ )\},$1,xg'

途中で(?: [^}\\]* | \\[a-z]+\{[^}]*\} )+選択肢があります。[^}\\]*閉じる中括弧やバックスラッシュ(プレーンテキスト)なしで文字列を一致させ、バックスラッシュ、小文字、および\\[a-z]+\{[^}]*\}一致する中括弧のペア(たとえば)を含む文字列を\url{whatever...}一致させます。グループ化は(?:...)+これらの置換と外部括弧のキャプチャを繰り返すので、一致を内側の部分にのみ置き換えることができます\edit{...}

-00Perl は、一度に 1 つの段落で入力を処理し、段落を空行で区切るように指示します。複数の段落にわたるタグを処理する必要がある場合は、入力-0777全体を一度に処理するように変更します(-0テキストファイルへの入力がないため、NULで区切られた入力でも機能します)。

あなたの例では、次のように動作するようです。

We Introduce a model for analyzing \emph{data} from various
experimental designs, such as paired or \url{http://www/}
longitudinal; as was done 1984 by NN \cite{mycitation} and by NNN
\cite{mycitation2}.

ただし、2つのレベルのコマンドを含む入力は(予想どおり)失敗します\edit{...}

Some \edit{\somecmd{\emph{nested} commands} here}.

移動:

Some \somecmd{\emph{nested} commands here}.

(誤った閉じた中括弧が削除されました)


バランス括弧を扱うのは実際には少し面倒です。たとえば、次の質問で説明します。 Perl正規表現:入れ子になった角かっこ一致

おすすめ記事