我有一系列需要重命名的文件,它们都包含模式“(*)”。例如;
001 (1).txt
002 (1).txt
003 (2).txt
Run Code Online (Sandbox Code Playgroud)
我想要的输出是将文件重命名为 001.txt、002.txt、003.txt。请注意,真实文件的长度和扩展名类型各不相同(这是我的测试批次)。
我已经搜索了网络和 SE 并提出了以下内容,它为我提供了终端中所需的输出。
ls *\(*\)* | sed 's/\(.*\)\( (.*)\)\(.*\)/mv & \1\3/'
mv 001 (1).txt 001.txt
mv 002 (1).txt 002.txt
mv 003 (2).txt 003.txt
Run Code Online (Sandbox Code Playgroud)
但是,一旦我将其通过管道传输到 sh,就会出现以下错误。
sh: line 1: syntax error near unexpected token `('
sh: line 1: `mv 001 (1).txt 001.txt'
Run Code Online (Sandbox Code Playgroud)
我知道这与该\( (.*)\)
部分有关。我试过转义内部括号,但这并没有给我想要的输出。我还搜索了正则表达式方法来搜索空格后跟任意 3 个字符,但没有运气。
我知道有更简单的方法可以实现我想要的,但我使用 sed 到目前为止,这是我唯一能模糊理解的东西。非常感谢让上述线路工作的任何投入,然后考虑更简单的方法。