我有一个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命令的任何帮助吗?
答案 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语法。