【问题标题】:Regex to get Jobid from string in shell script正则表达式从 shell 脚本中的字符串获取 Jobid
【发布时间】:2017-09-22 07:19:17
【问题描述】:

我想从 shell 脚本中的字符串中获取 Jobid。我可以使用以下代码获取以“CY”开头的jobid。

regex_jobid='CY[_0-9a-zA-Z]*'
temp="CY0PNI91354 Production AutoSys Job has failed. Call 249-3344. EC=111"

jobid="$(echo $temp | grep -oP "$regex_jobid")"

echo "jobid="$jobid 

我需要正则表达式以低于应以任何字符开头的 jobID。

MD0PN000609
ZCYNQNI93379
CY0PNI04806
CYM03922
ZCHI70490
ZCHI70511
PMI02649
PMI07530_sched_daily
IRZ02141
IWZ00306
IWI99990
USJ98000_sched
SD000206
WFI02272

【问题讨论】:

  • 应该以任何字符开头并且应该是字母数字
  • 作业 ID 是否总是一行中的第一个单词?
  • No.. 字符串中的任何位置.. 示例:请保留工作 MD000080_sched 在这种情况下,jobID 是 MD000080_sched
  • 那么如何判断是job id还是任意文本?
  • 我们不确定..假设如果字符串是“CY0PNI94980 Production AutoSys Job has failed. Call 249-3344. EC=54. RUN130990.”,那么jobid应该是“CY0PNI94980”

标签: regex linux shell


【解决方案1】:

由于您的模式可能出现在行中的任何位置,您需要先找到所有作业 ID,如令牌,然后过滤掉您不想要的:

regex_jobid="(CY|IR|MD|PM|ZC)"
echo "$temp" \
|awk '{for (i=1;i<=NF;i++) {if ($i ~ "^[A-Z][A-Z][_0-9a-zA-Z]*$") print$i}}' \
|egrep "^$regex_jobid"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-07
    • 1970-01-01
    • 2021-12-26
    • 1970-01-01
    • 2014-04-09
    • 2021-07-31
    相关资源
    最近更新 更多