如何用Shell脚本从字符串中提取指定扩展名的文件名?
从长字符串中提取文件名的Shell脚本实现
我来帮你把对应的Python逻辑转换成适配需求的Shell脚本,先直接给你可用的完整代码,再一步步拆解每部分的作用:
#!/bin/bash longstring="$1" fileext="$2" # 提取包含指定后缀的目标片段(按空格分割字符串,匹配带后缀的字段) matched_part=$(echo "$longstring" | awk -v ext="$fileext" '{for(i=1;i<=NF;i++) if($i ~ ext) print $i}') # 清理后缀之后的多余字符(比如原字符串里的冒号等无关符号) cleaned_part=${matched_part%"${matched_part#*$fileext}"} # 剥离目录路径,只保留最终文件名 filename=${cleaned_part##*/} echo "$filename"
脚本运行示例
完全按照你指定的方式调用:
./test.sh "the string contains a lot of irrelevant information and then a filename: /home/test/this_filename.txt: and then more irrelevant info" ".txt"
输出结果:
this_filename.txt
各步骤逻辑说明
- 提取匹配片段:用
awk遍历字符串的每个空格分割字段,找到包含指定文件后缀的字段并输出,对应Python中遍历分割列表、筛选含目标后缀元素的逻辑。 - 清理多余字符:通过Shell参数展开语法
${matched_part%"${matched_part#*$fileext}"},精准截断后缀之后的所有无关字符(比如示例里的冒号),比固定截取[:-1]更通用,适配不同的结尾符号。 - 剥离目录取文件名:使用
${cleaned_part##*/}这个Shell原生写法,直接去掉最后一个斜杠及之前的所有路径内容,快速得到纯文件名,对应Python中按斜杠分割取最后一个元素的操作。
内容的提问来源于stack exchange,提问作者colebod209
相关产品推荐
相关产品推荐

