Re: [問題] 關於grep 與 grep -v

看板Linux作者時間16年前 (2010/01/26 18:32), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
※ 引述《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
文章代碼(AID): #1BNiIZZX (Linux)
文章代碼(AID): #1BNiIZZX (Linux)