正则表达式使用' rename.pl'重命名多个文件

时间:2017-03-30 13:13:12

标签: regex linux perl rename

我使用rename.pl重命名多个文件。我无法想出正确的正则表达式。我的文件名格式为:

nn.some.title.string.ext

我想改变第一个'。'到' - '。我认为这样可行,但事实并非如此。

ssh-keygen -R hostname

有人可以帮我解决这个问题吗? TIA。

3 个答案:

答案 0 :(得分:2)

\.?可以匹配零个字符序列,因此s/\.?/ - /会替换输入开头的点或空字符串。

"abc.def.ghi" ⇒  " - abc.def.ghi"
".abc"        ⇒  " - abc"

要替换第一个.,您可以使用以下内容:

s/\./ - /

"abc.def.ghi" ⇒ "abc - def.ghi"

要替换所有.但是前导或扩展名中的一个,您可以使用以下内容:

s/(?!^)\.(?!\w+\z)/ - /g

答案 1 :(得分:1)

可能你会想确保第一点不是最后一点。我的意思是,如果你有任何机会你将拥有nn_some_title_string.ext文件名,脚本将不会改变最后一个点。

$fileName = "nn.some.title.string.ext";

$fileName =~s/\.(?=\w+\.\w+)/-/;

print "FileName: " . $fileName ."\n";

答案 2 :(得分:-1)

试试这个简单的正则表达式。

my $str = "nn.some.title.string.ext";

$str=~s/^([^\.]*)\./$1-/i;
or
$str=~s/\./-/;

#^([^\.]*)       Starting point upto the first dot

print $str;