0

我想重命名以这种模式命名的目录中的文件:

string1-number.html

例如:

English-5.html

我想要做的是像这样重命名文件:

string2-number.string3

例如:

Dictionary-5.en

我怎样才能做到这一点?我使用了这个脚本,但什么也没发生:

echo "English-5.html" | sed   's%\({English}\).\(\.*\)\(html\)%dictionary\2\en%'
4

4 回答 4

1

我建议使用 mmv 工具:http ://linux.dsplabs.com.au/mmv-copy-append-link-move-multiple-files-under-linux-shell-bash-by-wildcard-patterns-p5/

有了它,你可以这样做:

mmv *-*.html Dictionary-#2.en 
于 2012-06-24T06:54:01.003 回答
0
echo "English-5.html" | sed 's%English\(-[0-9][0-9]*.\)html%dictionary\1en%'

解释:

我在找English

后跟一个破折号、一个或多个数字和一个点-[0-9][0-9]*.(我用转义括号括住这部分以使其成为一个组(组 1))。

其次是html

在替换文本中,我使用\1输出组 1 的内容,以及更改后的文本。

于 2012-06-24T07:00:53.190 回答
0

您有 2 个错误:{...}不是必需的,您感到困惑\..

\.匹配文字点,而.匹配单个字符。

echo "English-5.html" |
sed 's%\(English\)\(.*\)\.\(html\)%dictionary\2.en%'
于 2012-06-24T09:50:28.887 回答
0

这个答案显示了对sed已经发布的命令的一些小的优化,并显示了如何实际重命名文件(在当前文件夹中):

 for f in *; do mv "$f" $(echo "$f" |\
 sed 's/^English-\([0-9]\+\)\.html$/dictionary-\1\.en/'); done
于 2012-06-24T10:06:05.670 回答