Wie entferne ich ein Zeichenfolgenmuster mithilfe des Linux-Terminals?

Wie entferne ich ein Zeichenfolgenmuster mithilfe des Linux-Terminals?

Ich möchte ein Zeichenfolgenmuster entfernen, das wie folgt aussieht

You should not remove this /*This is the part should remove*/ You
should not remove this

Ich möchte den gesamten Text zwischen /*und entfernen */.

Antwort1

Im Interesse von „Bring einem Mann das Angeln bei“ statt „Gib einem Mann einen Fisch“ verlinke ich Sie zu einem Tutorial zu regulären Ausdrücken. regular-expressions.info/quickstart.html

Falls Sie eine schnelle Lösung benötigen, gehen Sie wie folgt vor: Öffnen Sie die Datei in vim und geben Sie Folgendes ein:

:s/\/\*.*?\*\/ /g

Dies soll alle Ihre Zeichenfolgen, die mit /* beginnen und mit */ enden, durch ein Leerzeichen ersetzen. Ich habe Ihnen zuerst den Link zum Regex-Tutorial geschickt, für den Fall, dass ich den von mir geschriebenen Ausdruck verstümmele. Lesen Sie entweder das Tutorial und schreiben Sie Ihren eigenen Befehl, oder erstellen Sie eine Sicherungskopie, bevor Sie die obige Zeile verwenden.

Antwort2

Versuchen Sie es mit der folgenden schnellen und einfachen Sed-Zeile:

sed -e 's@/\*.*\*/@@' file

Dadurch wird die Ausgabe angezeigt, die Datei wird jedoch nicht tatsächlich geändert. Nachdem Sie es ausgeführt und bestätigt haben, dass die gewünschten Änderungen vorgenommen wurden, fügen Sie es dann -idavor ein -e, um es anzuweisen, die Datei an Ort und Stelle zu ändern.

Tatsächlich nimmt es alles zwischen dem „ /*und“ */und ersetzt es durch nichts (löscht es also im Wesentlichen), es erhält jedoch auch den /*„und“ */-Teil.

Ich gebe Ihnen zuerst die Methode ohne Änderungen, nur für den Fall, dass ich meinen regulären Ausdruck verpfuscht habe (ich arbeite mit dem Speicher und habe auf der aktuellen Maschine keinen Zugriff auf sed, um es schnell zu testen). Beachten Sie auch, dass dies nicht funktioniert, wenn der zu entfernende Text mehrere Zeilen lang ist, da sed jede Zeile einzeln bearbeitet. Wenn Sie ein Programm benötigen, das mehrere Textzeilen gleichzeitig bearbeitet, brauchen Sie entweder awk oder möglicherweise Perl (von beiden kenne ich mich nicht gut genug aus, um Codevorschläge zu machen).

verwandte Informationen