我想重命名以这种模式命名的目录中的文件:
string1-number.html
例如:
English-5.html
我想要做的是像这样重命名文件:
string2-number.string3
例如:
Dictionary-5.en
我怎样才能做到这一点?我使用了这个脚本,但什么也没发生:
echo "English-5.html" | sed 's%\({English}\).\(\.*\)\(html\)%dictionary\2\en%'
我想重命名以这种模式命名的目录中的文件:
string1-number.html
例如:
English-5.html
我想要做的是像这样重命名文件:
string2-number.string3
例如:
Dictionary-5.en
我怎样才能做到这一点?我使用了这个脚本,但什么也没发生:
echo "English-5.html" | sed 's%\({English}\).\(\.*\)\(html\)%dictionary\2\en%'
我建议使用 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
echo "English-5.html" | sed 's%English\(-[0-9][0-9]*.\)html%dictionary\1en%'
解释:
我在找English
后跟一个破折号、一个或多个数字和一个点-[0-9][0-9]*.
(我用转义括号括住这部分以使其成为一个组(组 1))。
其次是html
在替换文本中,我使用\1
输出组 1 的内容,以及更改后的文本。
您有 2 个错误:{...}
不是必需的,您感到困惑\.
和.
\.
匹配文字点,而.
匹配单个字符。
echo "English-5.html" |
sed 's%\(English\)\(.*\)\.\(html\)%dictionary\2.en%'
这个答案显示了对sed
已经发布的命令的一些小的优化,并显示了如何实际重命名文件(在当前文件夹中):
for f in *; do mv "$f" $(echo "$f" |\
sed 's/^English-\([0-9]\+\)\.html$/dictionary-\1\.en/'); done