2011-06-08 168 views

回答

7
if COMMAND | grep -q xyz; then 
    #do something 
fi 

編輯:讓它安靜。

+0

由於awk標記,我最初給了這個-1,但這也是可以接受的。 +1。編輯:它不會讓我改變我的投票,除非你編輯。但這個答案不值得-1,我的道歉。然而,當我測試這個時,我收到了grep的輸出,這可能是不可取的,但是與我的回答相比,你的代碼在一半的時間內執行了。雖然,差異是名義上的。 – matchew 2011-06-08 23:31:03

+0

使用'grep -q xyz'會抑制grep的輸出(並且有時也會讓它運行得更快,因爲它一找到匹配就立即退出)。 – 2011-06-09 05:12:48

+0

@戈登:謝謝 – 2011-06-09 06:30:59

0

可以通過管道命令的輸出到grep或者grep的-e。

0

儘管你可以用許多不同的方法來完成這個任務,但這是awk的完美用法。

prv cmd | awk '/xyx/ {print "cmd" } ' | bash 

這是你想要

例如什麼,

我有一個名爲TEMP.TXT只包含「XYZ」

如果我運行下面的命令,我會一個文本文件顯示輸出「發現它」

$ cat temp.txt | awk '/xyz/ {print "echo found it"}' | bash 
> found it 

所以我在做的是管道輸出我以前的命令轉換成awk,他正在尋找模式xyz(/ xyz /)。 awk將打印命令,在這種情況下,echo會找到它,並用管道命令來執行它們。簡單的單線程做你所問的問題。注意你可以自定義awk尋找的正則表達式。

0

你的規範是非常寬鬆的,但這裏是一個想法設法

output="$(cmd args ....)" 

case "${output}" in 
    *targetText*) otherCommand args ... ;; 
    *target2Text*) other2Command ... ;; 
esac 

我希望這有助於。

1

例如:

command1 | grep "xyz" >/dev/null 2>&1 && command2 
  • 運行command1
  • 其輸出濾波器使用grep
  • 從grep的
  • 並且如果grep的成功 輸出
  • 丟棄(這樣找到的字符串)
  • 執行命令2