Имам директория с 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