У мене є каталог файлів 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