【问题标题】:Pattern matching in shell scriptshell脚本中的模式匹配
【发布时间】:2014-07-14 04:39:20
【问题描述】:

我需要模式匹配方面的帮助。我有以下文本作为命令的输出。

 j-13PUDS1BDAAKK     RUNNING        ec2-54-242-150-167.compute-1.amazonaws.com        Log    Processing Job Flow   
  COMPLETED      Setup Hive
  RUNNING        CopyLogs
  PENDING        CopyLogs
  PENDING        CopyLogs
  PENDING        CopyLogs

我需要将 CopyLogs 输出与 Completed 相匹配。所以基本上在执行命令后输出应该是

COMPLETED        CopyLogs
COMPLETED        CopyLogs
COMPLETED        CopyLogs
COMPLETED        CopyLogs

如何在 do while 循环中执行此操作(用于重试逻辑)。我尝试了以下

while :; do
result=$(elastic-mapreduce --jobflow $JOBFLOW --list) //lets say this returns the above output
[[ $result == +(*RUNNING*|*PENDING*|*WAITING*) ]] || break
done
echo "result now has no RUNNING or PENDING or WAITING"

但我只需要为“CopyLogs”执行此操作。我如何做到这一点

【问题讨论】:

标签: regex shell scripting


【解决方案1】:
result=$(elastic-mapreduce --jobflow $JOBFLOW --list|grep -P '(COMPLETED[[:space:]]*CopyLogs)')

result 将携带所需的输出。

-P perl-正则表达式,请查看man grep

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-25
    • 1970-01-01
    相关资源
    最近更新 更多