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

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

我不确定我问的方式是否正确,或者是否有可能。我想用它们自己的名字来更改一些文件的名称。

假设我有文件 1、文件 2 和文件 3。我想执行如下操作:

mv file* file{recover_number}_xyz

获取:file1_xyz、file2_xyz 和 file3_xyz

答案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来打印更改而无需实际重命名任何内容。)

您也可以使用mvand来实现这一点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

相关内容