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

Linux下从文件提取jobID和workflowID并转为Bash变量的方法

提取日志中的jobID和workflowID到Bash变量

现有Linux日志文件内容如下:

20230512 12:42:06 INFO: job ID 
20230512 12:42:06 INFO: workflowID
20230512 12:42:06 INFO: {'jobsData': [{'jobID': '123_abc', 'jobStatus': 'RUNNING'}], 'timeoutData': {}, 'workflowID': 'bbc_999', 'workflowState': 'RUNNING'}
XXXX
YYY
ZZZ

已通过grep 'jobID' file_name定位到目标行,输出为:

20230512 12:42:06 INFO: {'jobsData': [{'jobID': '123_abc', 'jobStatus': 'RUNNING'}], 'timeoutData': {}, 'workflowID': 'bbc_999', 'workflowState': 'RUNNING'}

需要将该行中的jobID和workflowID的值提取出来,分别赋值给Bash变量jobID='123_abc'和workflowID='bbc_999'。

方法1:grep + sed组合提取

直接对grep输出做正则匹配提取:

# 提取jobID的值
jobID=$(grep 'jobID' file_name | sed -E "s/.*jobID': '([^']+)'.*/\1/")
# 提取workflowID的值
workflowID=$(grep 'jobID' file_name | sed -E "s/.*workflowID': '([^']+)'.*/\1/")

核心逻辑:用sed -E开启扩展正则,[^']+精准匹配单引号之间的内容,通过捕获组\1提取目标值。

方法2:awk一次性提取两个变量

利用awk的字段分隔功能,一次处理行并生成赋值命令,再通过eval执行:

eval $(grep 'jobID' file_name | awk -F"'" '{print "jobID=\"" $4 "\"; workflowID=\"" $10 "\""}')

核心逻辑:以单引号为分隔符,目标值分别落在第4和第10个字段里,生成的赋值语句直接通过eval生效。

方法3:Python解析类JSON结构(更可靠)

日志里的内容是单引号包裹的类JSON格式,转成标准双引号JSON后,用Python解析更稳妥,适合结构复杂的场景:

eval $(grep 'jobID' file_name | python3 -c "
import sys, json
# 截取INFO:后的内容,把单引号转双引号变成标准JSON
raw_data = sys.stdin.read().split('INFO: ')[1].replace(\"'\", '\"')
data = json.loads(raw_data)
# 输出赋值语句
print(f'jobID=\"{data[\"jobsData\"][0][\"jobID\"]}\"; workflowID=\"{data[\"workflowID\"]}\"')
")

核心逻辑:用JSON解析器精准提取嵌套结构里的值,避免正则匹配可能出现的边界问题。


内容的提问来源于stack exchange,提问作者nmr

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 00:35:19