2015-06-28 21 views
1

我與下列片的grep濾波器的奮鬥:的grep - 濾波器輸入其中包含標誌(例如,%S。)

test="$(
    grep -v "^#" "$file"   | \ 
    grep --word-regexp "\(,\s*\)\+google" | \ 
    cut -d, -f1       | \ 
    tr -d "[:blank:]" 
)" 

在哪裏$file是文件與以下內容:

# url,keyword,optional-keyword 
https://google.com/search?q=%s,google,g  
https://github.com/,gh,github  

的問題是如果$file包含一行%s標誌,則上面的grep不符合以下行:

https://google.com/search?q=%s,google,g

但是,如果我用%-替換標誌,則該行是匹配的。

如果該標誌是一個百分號字符後跟一個字母字符,grep不匹配任何內容。
我怎樣才能設置grep,因此它不會評估%s具有特殊含義?

+0

在任何情況下('%-'和'%s'),它都不符合我的要求。你的輸入是什麼,你想選擇哪一個? –

+0

對不起,我已將示例輸入文本編輯爲:google.com/search?q=%s,google,g現在,它僅適用於「% - 」標誌,不適用於「%s」標誌。查看更新的問題 – user2694295

回答

3

--word-regexp要求匹配從行首開始或在非單詞字符後立即開始。

https://google.com/search?q=%s,google,g具有以下一個/,那些兩者都是非單詞字符所以grep google將匹配線的字google

你的模式,然而,其匹配的逗號匹配行和葉繼s%ss模式是非單詞性格讓--word-regexp失敗的比賽\(,\s*\)\+google

如果在該行那麼當你的模式逗號前一個字符是從%---匹配與%-取代%s非單詞性格讓--word-regexp允許比賽。

tl; dr grep沒有以任何特殊的方式處理%s,您的模式和參數不允許它與寫入的輸入相匹配。