2014-09-12 70 views
0

E.g.具有下列file.gz:從壓縮文件中清除正則表達式

dbc 
1 
321 
d53 8 

我可以使用下面的一步一步的方法到grep爲正則表達式,顯示行數等等(當然,grep的是有點兒大能):

gunzip file.gz; grep -Pn "^\d{2,}$" file; gzip file 

輸出將是3:321

這將解壓文件,grep for patterns,壓縮文件。所以我必須有權寫入數據。我不想寫數據,並且必須有更聰明的方式來處理壓縮文件。

人們可以很容易地找到zgrep其中說,選項直接傳遞給grep。不過,我不能用zgrep使用正則表達式(只有POSIX expressions)。我也不知道zgrep是否會像上面提到的一步一樣在內部做同樣的事情。

那麼如何直接使用高級grep選項來壓縮文件而不需要解壓縮呢?

+0

爲什麼你需要使用perl正則表達式來完成這麼簡單的任務? – 2014-09-12 15:23:39

+0

我想你已經嘗試過'zegrep'或傳遞'-E'? – 2014-09-12 15:29:06

+0

@CasimiretHippolyte簡單的任務只是一個例子。我一般問如何grep的壓縮文件的正則表達式模式。 – EverythingRightPlace 2014-09-12 15:37:52

回答

1

您可以使用POSIX模式容易做相同的:

zgrep -n "^[0-9]\{2,\}$" zipzip.gz 

但是,如果你是絕對要使用一個Perl的正則表達式:

zgrep -nP "^\d{2,}$" zipzip.gz 
+0

嗯,我真的以爲我試過這個......但是,謝謝! – EverythingRightPlace 2014-09-12 15:40:00

0

你使用-E標誌嗎?從手冊頁:

-E,--extended-regexp 將PATTERN解釋爲擴展正則表達式(請參見下文)。

1

zgrep是正確的事情在這種情況下。如果你需要做其他命令類似的東西,沒有一個zgrep當量,通常可以做這樣的事情:

gunzip -c blah.gz | some_command 

或更一般

cat blah.gz | gunzip | some_command 

這適用於任何解壓stdin/stdout(這是他們中的大多數)的輸入和輸出。