Perl或Sed命令在匹配表达式之前删除内容

时间:2013-02-12 22:05:10

标签: 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命令的任何帮助吗?

3 个答案:

答案 0 :(得分:1)

尝试使用

'

而不是

"

否则你的shell会扩展$ a。

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

应该这样做。

答案 1 :(得分:0)

如果要删除一行中与所有正则表达式匹配的所有行。

你可以给第一行中的sed和delete一个范围,直到并包括匹配

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

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

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

答案 2 :(得分:0)

'而不是"相媲美。

"引用的材料中插入变量; shell执行此操作,Perl也是如此。

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