|
|
|
|
 如何:删除文章中的某些固定段落 - wiwj [ 2004-12-28 23:17 | 870 byte(s)]
 Re: 如何:删除文章中的某些固定段落 - wiwj [ 2004-12-29 13:53 | 1,313 byte(s)]
 Re: 如何:删除文章中的某些固定段落 - wiwj [ 2004-12-29 14:35 | 194 byte(s)]
 Re: 如何:删除文章中的某些固定段落 - wandys [ 2004-12-29 17:27 | 60 byte(s)]
 Re: 如何:删除文章中的某些固定段落 - wiwj [ 2004-12-29 20:30 | 4 byte(s)]
|
|
|
|
[Original]
[Print]
[Top]
|
begin
111111111111111
222222222222222222222222222
333333333333333333
aaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbbbbb
cccccccccccccccccccccc
4444444444444444
5555555555555555555555555
6666666666666666666666666666666
aaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbbbbb
cccccccccccccccccccccc
end
有如上这样一篇文章,现在希望删除其中所有如下段落
aaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbbbbb
cccccccccccccccccccccc
即得到结果如下:
begin
111111111111111
222222222222222222222222222
333333333333333333
4444444444444444
5555555555555555555555555
6666666666666666666666666666666
end
有何好方法?
|
|
|
[Original]
[Print]
[Top]
|
|
[Original]
[Print]
[Top]
|
|
我觉得要么一行一行的扫描,然后判断哪些行应该删除;要么把整个文件都读到一个 scalar 里面,然后用regular expression 替代。
|
|
|
----
It's better to burn out than to fade away...
|
|
[Original]
[Print]
[Top]
|
|
[Original]
[Print]
[Top]
|
是。原来关键在 $/
当 默认$/ 时 <> 一次取一行
当 $/ = "" 时 <> 一次取一个段落
当 undef($/) 时 <> 一次取全部
#!perl -w
use strict;
undef($/);
my $delthis = <<EOF;
中文中文中文'中文中'文中文中文中文中文中文中文中文
中文中文中文中文中文"中文中"文中文中文文中文中文中文
EOF
while (<DATA>) {
s/$delthis//g;
print;
}
__DATA__
BEGIN
111111111111111
222222222222222222222222222
333333333333333333
中文中文中文'中文中'文中文中文中文中文中文中文中文
中文中文中文中文中文"中文中"文中文中文文中文中文中文
4444444444444444
5555555555555555555555555
6666666666666666666666666666666
中文中文中文'中文中'文中文中文中文中文中文中文中文
中文中文中文中文中文"中文中"文中文中文文中文中文中文
中文中文中文'中文中'文中文中文中文中文中文中文中文
中文中文中文中文中文"中文中"文中文中文文中文中文中文
hello world 中文中文中文!
END
|
|
|
[Original]
[Print]
[Top]
|
|
[Original]
[Print]
[Top]
|
又有问题:
如果要删除的段落(即$delthis)中
包括一下特殊字符
如 +、 (、 ) 就会出问题,
正则表达式s/$delthis//g; 无法匹配。
有什么解决办法?
|
|
|
[Original]
[Print]
[Top]
|
|
[Original]
[Print]
[Top]
|
You can use quotemeta() or simply s/Q$delthis//g .
|
|
|
----
UN*X is user^H^H^H^Hfriend-friendly.
|
|
[Original]
[Print]
[Top]
|
|
|