我想重命名(在bash中)一个以特定字符串' foo'开头的文件列表,继续使用未指定长度的随机字符串' random1'并继续使用另一个已知字符串' bar'。基本上来自' foo_random1_bar_random2'我想要' foo_bar_random2'。我知道如何使用sed删除特定字符串,但不知道特定字符串之间未知长度的字符串。
答案 0 :(得分:2)
for i in foo_*_bar_*
do
j=$(echo "$i"|sed -e 's/foo_.*_bar_\(.*\)/foo_bar_\1/')
echo mv "$i" "$j"
done
这显示了mv
命令的列表。对命令感到满意后,请在echo
之前移除mv
,以便执行这些命令。
答案 1 :(得分:1)
使用BASH字符串替换:
f='foo_random1_bar_random2'
echo "${f/*bar/foo_bar}"
PS:根据下面的评论,如果在bar
之前有下划线,那么最好使用:
echo "${f/*_bar/foo_bar}"
<强>输出:强>
foo_bar_random2
将mv
用作:
for f in foo_*bar_*; do
mv -i "$f" "${f/*_bar/foo_bar}"
done
答案 2 :(得分:1)
如果您安装了rename
工具,则可以执行此操作
rename 's/foo_.*_bar/foo_bar/' files