/ / Команда 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