2013-10-07 12 views
0

我想運行一個運行grep命令並輸出結果的腳本。我希望grep返回一行,但要處理沒有匹配行的情況(例如,如果grepped文件不存在)。有沒有執行類似如何保證grep返回至少一行

line = grep ... 
if line is empty 
    print "\n" 
else 
    print line 

回答

3

所有你需要做的是檢查的grep的返回碼的方式。

grep如果一行匹配則返回0,如果沒有行匹配則返回1。如果發生錯誤,它會返回大於1的值。

$ echo "hi" | grep hi 
hi 
$ echo $? 
0 
$ echo "hi" | grep hello 
$ echo $? 
1 
1

在某些情況下(例如,當你有set -e在bash腳本),你不想grep與地位1,這是當提供給grep表達不匹配的情況下退出。

因此,防止1(或更高)被提供回從中grep被稱爲終端或腳本,使用退出狀態:

grep "EXPR" FILE.txt || echo "No match found" 

可能結果:

  1. 「EXPR」在FILE.txt中匹配 - 輸出:匹配列表
  2. 「EXPR」在FILE.txt中不匹配 - 輸出:
  3. 不正確的參數給grep或文件 「未找到匹配」 找不到(退出狀態2或更高版本) - 輸出(stdout): 「沒有找到匹配」(連同STDERR消息)
相關問題