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

Regex 在匹配表达式之前删除内容的Perl或Sed命令,regex,perl,sed,expression,Regex,Perl,Sed,Expression,我有一个html文件目录,我想在其中删除所有内容(包括)匹配的表达式。我已经尝试过这个(其中XXXXXX告诉我们我正在寻找的字符串: perl -pi -e "$a++if s/.*XXXXXX.*//si;$a||s/.*//s" *.html 我遇到此错误(当我按enter键时,它正在更改我的命令,请参见第一行): 有关要使用的Perl命令的任何帮助?请尝试使用 ' 而不是 " 否则,您的shell将扩展$a perl -pi -e "$a++if s/.*XXXXXX.*//si;$

我有一个html文件目录,我想在其中删除所有内容(包括)匹配的表达式。我已经尝试过这个(其中XXXXXX告诉我们我正在寻找的字符串:

perl -pi -e "$a++if s/.*XXXXXX.*//si;$a||s/.*//s" *.html
我遇到此错误(当我按enter键时,它正在更改我的命令,请参见第一行):

有关要使用的Perl命令的任何帮助?

请尝试使用

'
而不是

"
否则,您的shell将扩展$a

perl -pi -e "$a++if s/.*XXXXXX.*//si;$a||s/.*//s" *.html
应该这样做。

尝试使用

'
而不是

"
否则,您的shell将扩展$a

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

应该这样做。

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

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

sed -i -e '1,/match/d' file.html
如果要从与正则表达式匹配的每一行中删除内容

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

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

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

sed -i -e '1,/match/d' file.html
如果要从与正则表达式匹配的每一行中删除内容

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

而不是
”完全正确

变量被插入到
引用的材料中;shell和Perl都这样做

在本例中,您的shell将在将结果提供给Perl之前用其值替换
$a

结果是非法的Perl语法。

'
相当,而不是

变量被插入到
引用的材料中;shell和Perl都这样做

在本例中,您的shell将在将结果提供给Perl之前用其值替换
$a

结果是非法的Perl语法。

第二个
sed
命令中的表达式应该在“匹配”后面有一个。*例如,
sed's/^.*match.*$/'file.html>file.bak
,查看结果,然后重命名file.bak以覆盖文件。html@HappyGreenKidNaps这将清除整行。就地编辑是通过
-i
选项完成的。如果需要备份文件,请使用
-i.bak
。没错,它将被清除(即,空)行,但不删除它。我假设这就是您所说的“从每行中删除内容,这与正则表达式匹配”,而不是“…删除…”。此外,根据OP,前后都有。*似乎是他想要的。我知道
-I
选项的作用;我只是个人不鼓励它;YMMV.@happygreenkilds因为OP没有对任何事情发表评论,我不知道他/她真正想要什么。希望第二个
sed
命令中的表达式应该有一个。*followi取消“比赛”例如,
sed's/^.*match.*$/'file.html>file.bak
,查看结果,然后重命名file.bak以覆盖文件。html@HappyGreenKidNaps这将清除整行。就地编辑是通过
-i
选项完成的。如果需要备份文件,请使用
-i.bak
。没错,它将被清除(即,空)行,但不删除它。我假设这就是您所说的“从每行中删除内容,这与正则表达式匹配”,而不是“…删除…”.此外,根据OP,在前后使用。*似乎是他想要的。我知道
-I
选项的作用;我只是个人不鼓励它;YMMV。@Happygreen绑架因为OP没有对任何事情发表评论,我不知道他/她真正想要什么。