[英]How to grep for a string pattern from command output in shell script?
[英]grep pattern from command output
我想通過 jenkins 中的執行 shell 在 Linux 中運行以下命令。
當我直接在 Linux 中運行它時,我得到:
$ polyspace-access -list-project XX/YY -host MyHost -protocol http -login MyUsername -encrypted-password MyPassword
Connecting to MyHost
Connecting as MyUsername
Get project list with the last Run Id
XX/YY RUN_ID 10
Command Completed
我可以在 Jenkins 中運行相同的命令,但是——
export RunID=`polyspace-access -list-project XX/YY -host MyHost -protocol http -login MyUsername -encrypted-password MyPassword`
echo "This is my RunID: $RunID"
...結果如下:
15:06:59 這是我的 RuleID:連接到 MyHost 15:06:59 以 MyUsername 身份連接 15:06:59 獲取具有最后一個運行 ID 的項目列表 15:06:59 XX/YY RUN_ID 10 15:06:59 命令完全的
如何從結果中只讀取 RUN_ID 號?
如果你的 shell 有可用的awk
,你可以通過它來管道輸出以詢問包含文本“RUN_ID”的行中的第三個字段:
runid=`polyspace-access -list-project XX/YY -host MyHost -protocol http -login MyUsername -encrypted-password MyPassword | awk '/RUN_ID/ { print $3 }'`
echo "This is my RunID: $runid"
如果您知道XX/YY
是固定字符串,則可以將模式匹配調整為更嚴格。 如果可能有超過三個字段但所需的數字始終是最后一個字段,您也可以將打印調整為$NF
。
你可以用一些 groovy 來做到這一點。 請檢查以下示例管道。 我只是在腳本塊中回顯您的輸出。
pipeline {
agent any
stages {
stage('GetID') {
steps {
script {
string = sh(returnStdout: true, script: 'echo "15:06:59 This is RUN10X my RuleID: Connecting to MyHost 15:06:59 Connecting as MyUsername 15:06:59 Get project list with the last Run Id 15:06:59 XX/YY RUN_ID 10 15:06:59 Command Completed"').trim()
def runId = string.split("RUN_ID")[1].split(" ")[1]
echo "$runId"
}
}
}
}
}
注意:您可能需要改進腳本部分以處理錯誤情況。
如果您想對其進行概括,例如"RUN_ID"
周圍有空格,並且始終打印出最后一列,請嘗試:
# (broken apart for readability - it's one single string)
echo 'abc def -$314,159,265,358,979,323.84 XX/YY 2277118.822881188'
' RUN_ID 3321928094887362347870319429489390175' |
{m,g}awk '$!NF=$(NF*=!_!~NF)' FS=' RUN[_]ID '
gawk '$_=$(NF*=!_<NF)' FS=' RUN[_]ID '
mawk '$!++NF=$--NF' FS=' RUN[_]ID '
.
3321928094887362347870319429489390175
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.