正则表达式之匹配和修改
03月 31, 2009
示例均为Perl代码
测试匹配的用法:
$variable =~ m/regex/
每个用括号包围着的,匹配成功的部分,会被分别保存到变量$1, $2, $3…中。
如果不想分组,就用(?:⋯)
修改匹配的用法:
$var =~ s/regex/replacement/
书上的一个例子
$price =~ s/(\.\d\d[1-9]?)\d*/$1/
这会把12.25618替换为12.256。但是如果写成
$price =~ s/\.(\d\d[1-9]?)\d*/$1/
则结果是12256(这不是废话吗,呃,我开始就是这么写错的。。。)
在命令行运行Perl程序
详细的可以参考perlrun
书上给出的例子如下
% perl -p -i -e 's/sysread/read/g' file
- -e: 在命令行执行一个单行的程序。一旦指定的这个Switch,perl会在参数列表中寻找一个文件名。
- -p: 对参数列表中的文件每行进行操作。
- -i: 对参数列表的文件进行in-place的编辑。
书上的例子似乎有问题,至少在Windows下要指定备份文件的名(或者仅仅是后缀?)
Switch可以连着写。-p -i.bak等价于 -pi.bak。
例如,删除文件中的空白行:
类似于sed,会在终端回显结果
perl -p -e "s/^\s*$//g" bl.txt
in-place的编辑
perl -pi.bak -e "s/^\s*$//g" bl.txt
原先的文件名加了后缀.bak
No comments yet