如何删除方括号、里面的任何文本以及方括号前后的空格?

Hid*_*ats 6 command-line bash sed batch-rename

我有很多照片需要重命名。

[Wedding] Happy Day_001 [February].jpg
[Mountain] Summer Camp_165 [May].jpg
[Beach] Music Fest_58 [August].jpg
Run Code Online (Sandbox Code Playgroud)

我需要删除所有方括号。为此,我找到了this & this

sed在这些页面中使用命令,括号前后的空格仍然存在。就我而言,我希望删除里面的文本、前后的空格以及括号本身。

Happy Day_001.jpg  
Summer Camp_165.jpg  
Music Fest_58.jpg
Run Code Online (Sandbox Code Playgroud)

要删除[first]?&?[last]括号,如何使用sed命令执行此操作?

Zan*_*nna 9

您不应该使用sed重命名文件,但可以使用 Perl 程序rename,例如:

$ rename -n 's/\[[^]]+\] ([^[]+) \[[^]]+\]/$1/' *
rename([Beach] Music Fest_58 [August].jpg, Music Fest_58.jpg)
rename([Mountain] Summer Camp_165 [May].jpg, Summer Camp_165.jpg)
rename([Wedding] Happy Day_001 [February].jpg, Happy Day_001.jpg)
Run Code Online (Sandbox Code Playgroud)

-n测试后删除以实际重命名文件。

笔记

  • s/old/new替换oldnew
  • \[ 文字 [
  • [^[]+ 一些不是的字符 [
  • (stuff)保存stuff供以后到参考如$1$2

这仅在您的文件名一致时才有效。muru 的答案更便携。


mur*_*uru 7

sed是错误的工具。它不会重命名文件。虽然您可以将它与可以的东西配对,rename但从 Perl使用它更简单:

rename -n 's/\[.*?\]//g' *
Run Code Online (Sandbox Code Playgroud)

使用-n,rename将显示将进行哪些更改。运行而不-n实际重命名文件。rename是 Perl,在 Perl 中,.*?不是像 的贪婪匹配.*,所以你不需要使用像[^]]*.

也删除周围的空白:

rename -n 's/\s*\[.*?\]\s*//g' *
Run Code Online (Sandbox Code Playgroud)