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

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

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

[Wedding] Happy Day_001 [February].jpg
[Mountain] Summer Camp_165 [May].jpg
[Beach] Music Fest_58 [August].jpg

我需要删除所有方括号。为此,我发现&

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

Happy Day_001.jpg  
Summer Camp_165.jpg  
Music Fest_58.jpg

要删除[first] & [last]括号,如何使用sed命令来做到这一点?

答案1

您不应该使用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)

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

笔记

  • s/old/newold用。。。来代替new
  • \[文字[
  • [^[]+一些不存在的字符[
  • (stuff)保存以供以后stuff参考$1$2

这仅当您的文件名一致时才有效。muru 的回答更加便携。

答案2

sed是错误的工具。它不会重命名文件。虽然你可以将它与可以重命名的文件配对,但使用起来更简单rename来自 Perl

rename -n 's/\[.*?\]//g' *

使用-nrename将显示将进行哪些更改。运行 而不-n使用 来实际重命名文件。rename是 Perl,而在 Perl 中,.*?不是像 这样的贪婪匹配.*,因此您不需要使用 这样的技巧[^]]*

要删除周围的空格:

rename -n 's/\s*\[.*?\]\s*//g' *

相关内容