
用正则表达式处理文本
|
185
$_ = "I'm much better\nthan Barney is\nat bowling,\nWilma.\n";
我们知道,
^
和
$
都是用于匹配整个字符串的开始和结尾的锚位(见第
8
章)。但
当模式加上
/m
修饰符之后,就可以用它们匹配字符串内的每一行(把
m
看作多行
(
multiple lines
)匹配会比较容易记住),这样一来,它们代表的位置就不再是整个
字符串的首尾,而是每行的开头跟结尾了。因此,下面的模式会成功匹配:
print "Found 'wilma' at start of line\n" if /^wilma\b/im;
同样地,你也可以对多行文本逐个进行替换。下面的代码先把整个文件读进一个变
量,然后在每行开头补充文件名:
open FILE, $filename
or die "Can't open '$filename': $!";
my $lines = join '', <FILE>;
$lines =~ s/^/$filename: /gm;
一次更新多个文件
通过程序自动更新文件内容时,最常见的做法就是先打开一个和原来内容一致的新文
件,然后在需要的位置进行改写,最后用修改后的文件替换原来的文件。这么做和直
接修改原始文件的效果大致相同,并且还有些额外好处。
比如下面这个例子,假设现在有几百个格式类似的文件。其中一个叫做
fred03.dat
,
其内容像下面这样:
Program name: granite
Author: Gilbert ...