Suche nach Mustern in mehreren Dateien und Ersetzen eines Unterteils bei allen Vorkommen

Suche nach Mustern in mehreren Dateien und Ersetzen eines Unterteils bei allen Vorkommen

Ich helfe einer Freundin bei ihrer in LaTeX verfassten Diplomarbeit und brauche eine schnelle Lösung für „Suchen und Ersetzen“. Wie kann ich mithilfe eines Terminals unter Linux das folgende Muster finden:

\caption{*\cite{*}}

und ersetzen \citedurch\protect\cite

Ich habe Kate verwendet. Mit der Suchfunktion habe ich zunächst mehr als 2000 Treffer gefunden und durch Verfeinerung meiner Suche habe ich sie auf etwa 300 Treffer eingegrenzt. Ich muss sie jedoch weiter eingrenzen, da ich nicht alle ersetzen möchte \cite. Ich möchte nur ersetzen \cite, wenn es innerhalb von auftritt\caption{}

Antwort1

Vorausgesetzt, die Überschrift und der Zitattext enthalten keine Sonderzeichen (insbesondere *sollte der erste in Ihrem Beispiel keine Sonderzeichen enthalten \und der zweite *keine Sonderzeichen }), dann ist ein GNU sed-Regex

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

sollte funktionieren, denke ich. Wenn es vielleichtleerBeschriftungen und/oder Zitatzeichenfolgen möchten Sie möglicherweise die +Modifikatoren in ändern *. Sie können es testen, ohne die Datei(en) zu ändern, indem Sie

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

Wenn die richtigen Instanzen gefunden und geändert werden, können Sie die Dateien mit der Option direkt ändern -i. Wenn Sie nicht bereits an separaten Kopien arbeiten, können Sie automatisch Backups erstellen.

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

Ähnliche Ausdrücke sind in Perl möglich, wenn sed bei Ihnen nicht funktioniert. Andere Versionen von sed sollten funktionieren, erfordern aber möglicherweise eine andere Maskierung der Sonderzeichen.

verwandte Informationen