Ersetzen durch Grep

Ersetzen durch Grep

Ich habe einen Beispieltext wie diesen:

\documentclass[a4paper]{article}
\usepackage[a4paper,margin=2cm]{geometry}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{color}
\setlength{\parindent}{0em}
\setlength{\parskip}{2ex plus1ex minus0.5ex}
\newcommand{\stylea}[1]{\noindent{\textcolor[rgb]{0.9, 0.9, 0.8}{\fcolorbox[rgb]{0, 0, 0}{0.2, 0.2, 0.2}{#1}}}}

\begin{document}
\ttfamily
\setlength{\fboxrule}{0pt}
\setlength{\fboxsep}{0pt}
1 \stylea{\# Author{\hspace*{1em}}: Bhishan Poudel} \\
2 \stylea{\# Date{\hspace*{1em}}{\hspace*{1em}}: May 19, 2016} \\
3 \stylea{} \\
4 \stylea{Line wrapping in geany} \\
5 \stylea{===============================================================================} \\
6 \stylea{edit > preference > editor > features > line wrapping} \\
7 \stylea{then,} \\
8 \stylea{document > line wrapping} \\
\end{document}

Ich möchte alle Wörter \stylea{ } löschen und die Wörter innerhalb von {} intakt lassen.

Ich weiß, dass ich \stylea{ suchen und ersetzen und durch Leerzeichen ersetzen kann, aber ich möchte nicht einmal Leerzeichen und gleichzeitig auch die schließende Klammer } löschen.

Können wir in Geany auch nur Wörter im ausgewählten Block ersetzen? Wenn ich beispielsweise die Zeilen 1 bis 8 auswähle und stylea durch styleb ersetze?

Antwort1

Ersetzen durch Grep

(Das meiste davon) können Sie mit der Suche/Ersetzung mit regulären Ausdrücken erledigen.

Verwenden Sie das Dialogfeld „Ersetzen“ und stellen Sie sicher, dass „Reguläre Ausdrücke verwenden“ ausgewählt ist und „Mehrzeilige Übereinstimmung verwenden“ nicht.

Suchen nach:

\\stylea{(.*)}

Und ersetzen durch:

\1

Dies ist ein regulärer Ausdruck „Rückverweis“ auf den „erfassten“ Text im Suchausdruck (der Teil in den Klammern). Wenn Sie mehrere Erfassungen haben, können Sie mit \1, \2, usw. darauf verweisen.

Beachten Sie jedoch, dass es eine Einschränkung bei regulären Ausdrücken gibt, die Ihnen wahrscheinlich einige Probleme bereiten wird. Sie haben einige Zeilen, in denen geschweifte Klammern im Text verschachtelt sind, wie zum Beispiel:

\stylea{\# Date{\hspace*{1em}}{\hspace*{1em}}: May 19, 2016}

Reguläre Ausdrücke können Verschachtelungstrennzeichen ( {}) wie dieses nicht (von sich aus) zählen und abgleichen. In Ihrem Fall stellt dies möglicherweise kein praktisches Problem dar, da die (.*)Erfassung so viele Zeichen wie möglich vor dem Zeilenende abgleicht („gieriges Abgleichen“), was in Ihrem Beispieltext das Richtige bewirkt, da \stylea{}sich jedes Tag in einer Zeile befindet. Wenn Sie Dateien mit Tags haben, \stylea{}die sich über mehrere Zeilen erstrecken, wird diese Methode den Text nicht richtig ersetzen. Ihre beste Option besteht möglicherweise darin, diese Instanzen zuerst zu finden und sie entweder manuell zu ändern oder sicherzustellen, dass sie sich nicht über mehrere Zeilen erstrecken.

Dies sollte mit vielen Editoren funktionieren, die Suchen/Ersetzen mit regulären Ausdrücken anbieten, obwohl die Details der Dialogoptionen natürlich variieren. Ich habe es mit TextWrangler für Mac OS X getestet.

Ersetzen nur in der Auswahl

Wählen Sie die 8 nummerierten Zeilen aus. Suchen nach:

\\stylea{

Und ersetzen durch:

\\styleb{

Klicken Sie anschließend im Dialogfenster „Ersetzen“ auf die Schaltfläche „In Auswahl“.

verwandte Informationen