Skip to content

正则表达式之匹配和修改

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

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Connecting to %s

加关注

Get every new post delivered to your Inbox.