两行非常相似的 sed 语句,可以合并吗?

两行非常相似的 sed 语句,可以合并吗?

我在 shell 脚本中有以下两行,想知道是否有任何方法可以使用 sed 将它们压缩为一行。我不确定是否有通配符或任何可以替换其中的单词 Glitch 和 Chill 的东西,但如果有,我想知道。真正重要的是,它会删除您看到的奇怪括号中的所有内容,而不会影响其他任何内容。

find . -type f -name '【Chill*' -execdir bash -c 'for file in "$@"; do new=$(echo "$file" | sed -r 's/【Chill.*】//'); mv -v "$file" "$new"; done' _ {} +  
find . -type f -name '【Glitch*' -execdir bash -c 'for file in "$@"; do new=$(echo "$file" | sed -r 's/【Glitch.*】//'); mv -v "$file" "$new"; done' _ {} +

答案1

您知道使用 Perl 的重命名可以完成所有操作吗:

$ rename -n 's:【Chill.*】|【Glitch.*】::' 【Chill* 【Glitch*
【Chillxx】file1.ext  renamed as file1.ext
【Chillyy】file2.ext  renamed as file2.ext
【Glitchxx】file3.ext renamed as file3.ext
【Glitchyy】file4.ext renamed as file4.ext

答案2

find . -type f -name '【Chill*' -o -name '【Glitch*' -execdir bash -c 
'for file in "$@"; do 
   new=$(echo "$file" | sed -r 's/【Chill.*】\|【Glitch.*】//');
   mv -v "$file" "$new";
 done' _ {} +

答案3

答案@赛勒斯很好,但如果没有sed,并且使用简化的for循环,效果会更好:

find . -type f -name '【Chill*' -o -name '【Glitch*' -execdir bash -c 
'for file; do 
   new=${file/【Chill*】/};
   new=${new/【Glitch*】/};
   mv -v "$file" "$new";
 done' _ {} +

相关内容