You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 07:25:32