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 № 1Tente 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