/ / Perl ou Sed para excluir o conteúdo antes de corresponder à expressão - regex, perl, sed, expression

Comando Perl ou Sed para excluir o conteúdo antes da expressão correspondente - expressão regex, perl, sed

Eu tenho um diretório de arquivos html no qual gostaria de remover todo o conteúdo (e inclusive) uma expressão correspondente. Tentei isso (onde XXXXXX us a string que estou procurando:

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

Estou recebendo este erro (quando pressiono enter, ele está mudando meu comando, consulte a primeira linha):

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.

Alguma ajuda no comando Perl para usar?

Respostas:

1 para resposta № 1

Tente usar

"

ao invés de

"

caso contrário, seu shell expandirá $ a.

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

deve fazer o truque.


0 para resposta № 2

Bastante com " ao invés de ".

Variáveis ​​são interpoladas em "material citado; conchas fazem isso e Perl também.

Nesse caso, seu shell que substituirá $a com seu valor antes de alimentar o resultado para Perl. O resultado é uma sintaxe ilegal do Perl.


0 para resposta № 3

Se você deseja excluir todas as linhas até uma linha, que corresponda a alguma expressão regular.

Você pode definir um intervalo para sed e excluir da primeira linha até e incluindo a partida

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

Se você deseja remover o conteúdo de cada linha, que corresponda a uma expressão regular

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