1

我有一个 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 命令有什么帮助吗?

4

3 回答 3

1

尝试使用

'

代替

"

否则你的 shell 会扩展 $a。

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

应该做的伎俩。

于 2013-02-12T22:08:47.497 回答
0

如果要删除与某个正则表达式匹配的行之前的所有行。

您可以为 sed 提供一个范围,并从第一行删除直到并包括匹配项

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

如果要从每行中删除与正则表达式匹配的内容

sed -i -e 's/.*match//' file.html
于 2013-02-12T22:09:03.977 回答
0

相当用 '而不是".

变量被插入到 "引用的材料中;shell 这样做,Perl 也这样做。

在这种情况下,您的 shell$a在将结果提供给 Perl 之前将替换为它的值。结果是非法的 Perl 语法。

于 2013-02-12T22:12:50.233 回答