複数のファイルからパターンを検索し、すべてのサブ部分を置き換えます。

複数のファイルからパターンを検索し、すべてのサブ部分を置き換えます。

友人がLaTeXで論文を書くのを手伝っていますが、「検索と置換」のための迅速なソリューションが必要です。 Linuxで端末を使用して次のモードを見つけるには:

\caption{*\cite{*}}

そして\citeに交換\protect\cite

私はケイトを使用しています。検索機能を使用して最初に2,000を超える一致を見つけ、検索を具体化して約300に絞り込みました。ただし、すべてを交換したくないので、さらに絞り込む必要があります。発生する部分\citeだけを交換したいです。\cite\caption{}

ベストアンサー1

タイトルと引用符のテキストに特殊文字が含まれていないと仮定するGNU sed*正規\表現*}

s:(\\caption\{[^\]+)(\\cite\{[^}]+\}\}):\1\\protect\2:g

私はそれが動作する必要があると思います。可能であれば+タイトルおよび/または引用文字列の修飾子をに変更できます*。ファイルを変更せずに次のコマンドを使用してテストできます。

sed -nr 's:(\\caption\{[^\]+)(\\cite\{[^}]+\}\}):\1\\protect\2:gp' files

これが正しいインスタンスを見つけて変更したように見える場合は、オプションを使用してファイルをその場所で変更することができます-i。別のコピーをまだ作業していない場合は、自動的にバックアップを作成できます。

sed -i.bak -r 's:(\\caption\{[^\]+)(\\cite\{[^}]+\}\}):\1\\protect\2:g' files

sed が機能しない場合、Perl でも同様の表現を使用できます。他のバージョンのsedも動作しますが、特殊文字を異なってエスケープする必要があるかもしれません。

おすすめ記事