Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String Bash重命名文件删除特定字符串之间的随机字符串_String_Bash_File_Rename - Fatal编程技术网

String Bash重命名文件删除特定字符串之间的随机字符串

String Bash重命名文件删除特定字符串之间的随机字符串,string,bash,file,rename,String,Bash,File,Rename,我想重命名(在bash中)以特定字符串“foo”开头的文件列表,以未指定长度的随机字符串“random1”继续,并以另一个已知字符串“bar”继续。基本上来自“foo_random1_bar_random2”,我想要“foo_bar_random2”。我知道如何使用sed删除特定字符串,但不知道特定字符串之间长度未知的字符串 使用BASH字符串替换: f='foo_random1_bar_random2' echo "${f/*bar/foo_bar}" 注:根据下面的注释,如果在栏之前有下划

我想重命名(在bash中)以特定字符串“foo”开头的文件列表,以未指定长度的随机字符串“random1”继续,并以另一个已知字符串“bar”继续。基本上来自“foo_random1_bar_random2”,我想要“foo_bar_random2”。我知道如何使用sed删除特定字符串,但不知道特定字符串之间长度未知的字符串

使用BASH字符串替换:

f='foo_random1_bar_random2'
echo "${f/*bar/foo_bar}"
注:根据下面的注释,如果在
栏之前有下划线,则最好使用:

echo "${f/*_bar/foo_bar}"
输出:

foo_bar_random2
使用
mv
作为:

for f in foo_*bar_*; do
   mv -i "$f" "${f/*_bar/foo_bar}"
done

使用BASH字符串替换:

f='foo_random1_bar_random2'
echo "${f/*bar/foo_bar}"
注:根据下面的注释,如果在
栏之前有下划线,则最好使用:

echo "${f/*_bar/foo_bar}"
输出:

foo_bar_random2
使用
mv
作为:

for f in foo_*bar_*; do
   mv -i "$f" "${f/*_bar/foo_bar}"
done
这显示了
mv
命令的列表。一旦您对命令满意,请在
mv
之前删除
echo
,以便执行这些命令


这显示了
mv
命令的列表。一旦您对命令满意,请在
mv
之前删除
echo
,以便执行这些命令。

如果您安装了
重命名
工具,则可以执行此操作

rename 's/foo_.*_bar/foo_bar/' files

如果安装了
重命名
工具,则可以执行此操作

rename 's/foo_.*_bar/foo_bar/' files

这在foo_random1_bar_randombar2I上中断,在提供的示例中,我看不到这一点。如果有这样的可能性,我会调整它。“随机”对我来说似乎是相当广泛的输入;-)
“${s/*\u bar/foo\u bar}”
很容易处理它,但是OP没有指定下划线总是在
栏之前,正如您在回答中所假设的那样。但这不是重点。关键是,
${f//}
只能对
*
进行贪婪匹配。这在foo\u random1\u bar\u randombar2上出现了中断。在提供的示例中,我看不到这一点。如果有这样的可能性,我会调整它。“随机”对我来说似乎是相当广泛的输入;-)
“${s/*\u bar/foo\u bar}”
很容易处理它,但是OP没有指定下划线总是在
栏之前,正如您在回答中所假设的那样。但这不是重点。关键是
${f//}
只能对
*
进行贪婪匹配。