【发布时间】:2011-03-16 01:59:08
【问题描述】:
我是 perl 新手。
目前,我的任务是遍历文件夹中的所有 .htm 文件并做两件事:
- 将所有“.htm”扩展名替换为“.xml”
- 将文件名中的所有空格替换为下划线。
在我的 perl 脚本中,我输入了这两行:
@pub=`ls $sourceDir | grep '\.htm' | grep -v Default | head -550`;
foreach (@pub) {
my $docName = $_;
chomp($docName);
$docName =~ s/.htm$//g;
$docName =~ s/ /_/g;
....}
$docName 是保存文件当前全名(包括扩展名)的变量。有趣的是,这两个 $docName 替换语句,在任何时候,只有上面一个有效。例如这里的示例代码,只会替换扩展名,但会省略空格,但如果我将第一个注释掉,那么空格会完美地变成下划线,但扩展名仍然是“.htm”。
专家可以帮助我吗?并且还可以建议我哪里出错了?提前致谢!
【问题讨论】:
-
首先,您的正则表达式
.htm$将查找在字符串末尾有任何字符后跟htm 的模式,因为.表示任何字符。如果你想要一个文字句点,你需要使用\. -
而
s/.htm$//g将删除.htm而不是用.xml替换它,并且由于您在行尾寻找单个实例,所以g是可能不需要
标签: perl