所以,我环顾四周,#2,我知道查找和替换文本的工作是这样的:
perl -pi -w -e 's/www.example.com/www.pressbin.com/g;' *.html
但是,如果我想查找和替换文本是什么,有斜线文件路径? 如何做到这一点呢?
perl -pi -w -e 's/path/to/file/new/path/to/file/g;' *.html
所以,我环顾四周,#2,我知道查找和替换文本的工作是这样的:
perl -pi -w -e 's/www.example.com/www.pressbin.com/g;' *.html
但是,如果我想查找和替换文本是什么,有斜线文件路径? 如何做到这一点呢?
perl -pi -w -e 's/path/to/file/new/path/to/file/g;' *.html
用Perl的正则表达式,你可以使用除空格作为分隔符正则表达式的任何字符,尽管
\w
(所以s xfooxbarx
相同s/foo/bar/
)和 ?
(隐式激活比赛只有一次的行为,不建议使用)和 '...'
(可变插值转) 应该避免。 我宁愿花括号:
perl -pi -w -e 's{path/to/file}{new/path/to/file}g;' *.html
可能没有相应的字符串内出现的定界符,当他们是平衡的括号或正确转义除。 所以,你也可以说
perl -pi -w -e 's/path\/to\/file/new\/path\/to\/file/g;' *.html
但就是dowrnright难看。
当使用括号/括号等可以有正则表达式和替换之间的空白,允许像beatiful代码
$string =~ s {foo}
{bar}g;
这方面的另一个有趣的正则表达式的选项是quotemeta
功能。 如果搜索表达式包含许多字符通常会被具有特殊意义的解释,我们可以包围内部的串\Q...\E
。 所以
m{\Qx*+\E}
匹配的确切字符串x*+
,即使像字符*
,“+”或者|
等等都包括在内。
您可以使用其它字符不是“/”来指定模式。 例如:
perl -pi -w -e 's,path/to/file,new/path/to/file,g;' *.html
perl -pi -w -e 's/path\/to\/file/new\/path\/to\/file/g;' *.html