两个非常相似的sed线,它们可以合并吗?


1

我在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' _ {} +

只是好奇:是什么产生了那些奇怪的粗体/衬垫支架【】?(左侧黑色透支支架右侧黑色透支支架。)
Arjan

Answers:


1

你知道你可以通过使用Perl的重命名完成所有工作:

$ rename -n 's:【Chill.*】|【Glitch.*】::' Chill* Glitch*
Chillxxfile1.ext  renamed as file1.ext
Chillyyfile2.ext  renamed as file2.ext
Glitchxxfile3.ext renamed as file3.ext
Glitchyyfile4.ext renamed as file4.ext

@ user401590 如果你喜欢你的upvote:P并且不要忘记删除-n选项以执行实际重命名。
αғsнιη14年

1
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' _ {} +

0

@Cyrus的答案很好,但如果没有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' _ {} +
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.