/ / Perl oder Sed Befehl zum Löschen von Inhalt vor dem Ausdruck - regex, perl, sed, Ausdruck

Perl oder Sed Befehl zum Löschen von Inhalt vor dem Ausdruck - regex, perl, sed, expression

Ich habe ein Verzeichnis von HTML-Dateien, in dem ich alle Inhalte (und einschließlich) eines passenden Ausdrucks entfernen möchte. Ich habe dies versucht (XXXXXX ist der gesuchte String,

perl -pi -e "$a++if s/.*XXXXXX.*//si;$a||s/.*//s" *.html

Ich bekomme diesen Fehler (wenn ich Enter drücke, ändert sich mein Befehl, siehe erste Zeile):

perl -pi -e "$a=1 if *.htmla && s/.*XXXXXX.*//is; s/.*//s if *.htmla" *.html
Bareword found where operator expected at -e line 1, near "*.htmla"
(Missing operator before htmla?)
Bareword found where operator expected at -e line 1, near "*.htmla"
(Missing operator before htmla?)
syntax error at -e line 1, near "="
syntax error at -e line 1, near "*.htmla
"
Execution of -e aborted due to compilation errors.

Irgendwelche Hilfe auf Perl-Befehl zu verwenden?

Antworten:

1 für die Antwort № 1

Versuchen Sie es mit

"

anstatt

"

Andernfalls wird Ihre Shell $ a erweitern.

perl -pi -e "$a++if s/.*XXXXXX.*//si;$a||s/.*//s" *.html

sollte den Trick machen.


0 für die Antwort № 2

Ganz mit " Anstatt von ".

Variablen werden interpoliert "-quoted Material; Muscheln machen das und Perl auch.

In diesem Fall wird Ihre Shell ersetzt $a mit seinem Wert, bevor das Ergebnis an Perl übergeben wird. Das Ergebnis ist eine illegale Perl-Syntax.


0 für die Antwort № 3

Wenn Sie alle Zeilen bis zu einer Zeile löschen möchten, die einem regulären Ausdruck entspricht.

Sie können sed einen Bereich zuweisen und von der ersten Zeile bis einschließlich der Übereinstimmung löschen

sed -i -e "1,/match/d" file.html

Wenn Sie den Inhalt aus jeder Zeile entfernen möchten, die einem regulären Ausdruck entspricht

sed -i -e "s/.*match//" file.html