我使用rename.pl重命名多个文件。我无法想出正确的正则表达式。我的文件名格式为:
nn.some.title.string.ext
我想改变第一个'。'到' - '。我认为这样可行,但事实并非如此。
ssh-keygen -R hostname
有人可以帮我解决这个问题吗? TIA。
答案 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;