2012-03-21 44 views

回答

5

按照grep手冊頁,你可以指定-U--binary到:

對待文件(S)爲二進制。默認情況下,在MS-DOS和MS-Windows下,grep通過查看從文件中讀取的前32KB內容來猜測文件 類型。如果grep決定 文件是一個文本文件,它將從原始文件內容中去除CR字符(使 的正則表達式與^$正常工作)。指定-U否決此猜測, 導致所有文件被讀取並逐字傳遞給匹配機制;如果文件是每行末尾有CR/LF對的 文本文件,則會導致某些正則表達式 失敗。此選項對MS-DOS和MS-Windows以外的平臺沒有影響。

所以:

$ head -3 test.ctl 
row 1 
row 2 
row 3 
$ head -3 test.ctl | cat -nv 
    1 row 1^M 
    2 row 2^M 
    3 row 3 
$ head -3 test.ctl | grep '[^[:print:]]' 

$ head -3 test.ctl | grep '[[:cntrl:]]' 

$ head -3 test.ctl | grep -U '[^[:print:]]' 
row 1 
row 2 

$ head -3 test.ctl | grep -U '[[:cntrl:]]' 
row 1 
row 2