2010-09-07 90 views
7

我用下面的語法,以便找到/etc的「grep:行太長」錯誤消息

(由丹尼斯·威廉姆森在超級用戶現場回答)

下的IP地址,但我得到的消息「的grep:線路太長「。

有人有想法如何忽略此消息,爲什麼我得到這個?

grep -Er '\<([0-9]{1,3}\.){3}[0-9]{1,3}\>' /etc/ 
    grep: line too long 

回答

5

使用查找構建文件到grep的列表,

find /etc -type f -print0 | xargs -r0 grep -E '\<([0-9]{1,3}\.){3}[0-9]{1,3}\>' 

一般發現是遍歷文件的文件系統和建築名單,其他程序的更靈活的方式。

+1

錯誤信息不是來自外殼,即它不是一個參數列表的問題,因爲它太長了。 – maxschlepzig 2010-09-07 09:18:37

+0

是的,find/xargs經常被用來解決*那個問題。這不是那個問題,但是使用find/xargs解決它。 – jmtd 2010-09-13 14:25:21

+0

@jmtd精美的作品+1。 – Hazok 2011-09-28 00:47:46

20

find/xargs解決方案對我無效,但導致相同的錯誤。

我通過使用-I grep選項(忽略二進制文件)解決了此問題。在我的情況下,文件列表中必須有一個二進制文件才能搜索到沒有換行符,所以grep試圖讀取一個太大的巨大行。這是我對這個錯誤意味着什麼的猜測。

我的想法來自:http://web.archiveorange.com/archive/v/am8x7wI0r0243prrmYd4

這可能不是爲你工作,當然,如果有一條線太長的文本文件。

+0

爲了讓其他人明白,這個選項是印度的資本I(「-I」),而不是像利馬那樣的「l」。 – riderchap 2011-08-19 20:33:58

+0

@riderchap很高興我讀到您的評論。稍後我會試試帽子。從Shorin的這個答案和jmtd的答覆中,似乎有兩個問題。一個文件列表太長的問題,然後一個問題是文件中的實際行太長。在我的情況下,它是文件列表和jmtd選項是最好的。對於文件中的行太長的情況,Shorin的選擇似乎是最好的,但我沒有辦法嘗試。忽略二進制文件也可能使Shorin低於文件列表中最大計數的閾值。 – Hazok 2011-09-28 00:46:37

+1

啊!謝謝。我讓它看起來像印度而不是利馬。 – Shorin 2011-12-08 15:49:43