从压缩文件中获取正则表达式

时间:2014-09-12 15:17:22

标签: regex linux bash grep gzip

E.g。有以下file.gz:

dbc
1
321
d53 8

我可以使用以下逐步方法来grep for regex,显示行号等等(好吧,grep有点强大):

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

输出为3:321

这将解压缩文件,grep for patterns,压缩文件。所以我必须有权写入数据。我不想写数据,必须有一种更智能的方法来处理压缩文件。

可以很容易地找到zgrep,表示选项直接传递给grep。不过,我不能在zgrep中使用正则表达式(只有POSIX expressions)。我也不知道zgrep是否会像上面提到的那样逐步完成相同的工作。

那么如何直接对压缩文件使用高级grep选项而不解压缩呢?

3 个答案:

答案 0 :(得分:1)

您可以使用POSIX模式轻松完成相同的操作:

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

但如果你绝对想要使用perl正则表达式:

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

答案 1 :(得分:1)

在这种情况下,

zgrep是正确的事情。如果你需要为其他没有等效zgrep的命令做类似的事情,你通常可以这样做:

gunzip -c blah.gz | some_command

甚至更一般

cat blah.gz | gunzip | some_command

这适用于在stdin / stdout(大部分都是)上输入和输出的任何解压缩器。

答案 2 :(得分:0)

您使用的是-E标志吗?从联机帮助页:

-E, - extended-regexp     将PATTERN解释为扩展正则表达式(见下文)。