如何从正则表达式中恢复价值


0

我不确定我是在问正确的方法还是根本不可能。我想使用它们自己的名称来更改某些文件的名称。

假设我有file1,file2和file3。我想做类似的事情:

mv file* file{recover_number}_xyz

获取:file1_xyz,file2_xyz和file3_xyz

Answers:


1

有一些工具可以将正则表达式的搜索和替换应用于整个文件名,例如perl-rename(通常也称为prename)。在此类工具中,您将在“捕获组”(括号)中\d+[0-9]+内部匹配多个数字,并在以后根据程序($1\1取决于程序)对其进行引用。

例如:

prename -v 's/file(\d+)$/file$1_xyz/' file[123]

prename -v 's/(file\d+)$/$1_xyz/' file[123]

(该-v选项可以使姓氏打印出更改。您可以使用它-n来打印更改,而无需实际重命名。)

您还可以使用just mv和实现此目的sed

for old in file[123]; do
    new=$(sed -r 's/file([0-9]+)$/file\1_xyz/' <<< "$old")
    mv -v "$old" "$new"
done

但是,如果仔细观察,您实际上并不需要该数字。您要做的就是仍然添加一些静态文本,如下所示:

prename 's/$/_xyz/' file[123]

for f in file[123]; do
    mv "$f" "${f}_xyz"
done
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.