/ / Perl или Sed команда за изтриване на съдържание преди съвпадение на израза - регекс, perl, sed, израз

Perl или Sed команда за изтриване на съдържание преди съвпадение на израз - regex, perl, sed, expression

Имам директория с html файлове, в която бих искал да премахна цялото съдържание (включително включително) съвпадащ израз. Опитах това (където XXXXXX ни низът, който търся:

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

Получавам тази грешка (където когато натисна Enter, тя променя моята команда, вижте първия ред):

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.

Всяка помощ от командата Perl да се използва?

Отговори:

1 за отговор № 1

Опитайте да използвате

"

вместо

"

в противен случай черупката ви ще се разшири $ a.

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

трябва да направи този трик.


0 за отговор № 2

Съвсем с " вместо ".

Променливите са интерполирани в "-цитиран материал; черупки правят това и така прави и Perl.

В този случай вашата черупка, която ще замести $a със стойността му преди подаване на резултата на Perl. Резултатът е незаконен синтаксис на Perl.


0 за отговор № 3

Ако искате да изтриете всички редове до линия, което съответства на някакъв редовен израз.

Можете да дадете диапазон на sed и да изтриете от първия ред до и включително мача

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

Ако искате да премахнете съдържанието от всеки ред, което съответства на обикновен израз

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