Re: [問題] 關於grep 與 grep -v
※ 引述《tas72732002.bbs@ptt.cc (蔥頭)》之銘言:
: 想請問一下
: 1.使用多個 grep 是代表須同時成立嗎??(AND)
: EX: gerp "david" | grep "jason"
: 是代表 需同時出現 david和jason 才會被挑出來嗎??
: 2.使用多個 grep -v 是代表 或 的意思嗎??(OR)
: EX: grep -v david | grep -v jason
: 是代表 如有出現 david 或 jason 就挑出來嗎??
喔喔,你可能誤解|的意義了。
程式語言裡|以及||都是or的意思,
但是bash裡,|代表管線命令,表示前面的輸出當成後面的輸入;
只有在expression裡,| 才有or的意義。
||後面的命令則代表回傳值非0時要做的事情。
所以:
假設有一個檔案名稱為test.txt,
grep "david" test.txt | grep "jason"
表示從test.txt裡撈到有david的這一行,再取出有jason這行
所以,同時會有david跟jason出現,可以視為AND;
grep -v "david" test.txt | grep -v "jason"
表示取出"沒有"david的這些行之後,再取出"沒有"jason關鍵字的這些行,
所以輸出結果絕對沒有david跟jason這兩個關鍵字。
如果你要取出jason『或』david,請用egrep:
egrep "david|jason" test.txt
這樣才有or的效果。
至於||,可以看一個例子:
[ -e /etc/exportfs ] && echo "nfs server" || echo "nfs client"
如果你的系統存在著/etc/exportfs這個檔案,則return value會為0,
則會接續&&之後的命令去執行(echo "nfs server");
若系統沒有這個檔案,則此test敘述return value不為0,
則會接續||之後的命令(echo "nfs client")。
多看看鳥哥學長的網站,親手練習會更有收穫。
--
我不是風 但我想飛
--
◢█◣▏◤█◣ ◆未來最舊小棧 Oldest Future Object
█●▇█▁˙█ ◆通訊頻率 OfO.twbbs.org
◥█◢▉◥█◤ ◆來源座標 140.109.80.232
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):