仅在一行中查找子字符串

时间:2014-10-19 17:58:08

标签: regex unix

我有一个 text 二进制文件,其中有数千行由日期和单词组成的行组成。这些行中的大多数都包含单词REGULAR。但是,文件中某处只有一个包含REGU的损坏行。

有没有办法可以用行REGU来隔离行号?

示例行

BLLAH2014-02-26REGULAR2014-01-02-20.06.03BLAHHHH

3 个答案:

答案 0 :(得分:2)

grep -anw  "REGU[^L]*" file.bin

使用此命令,您可以找到与REGU匹配的所有行,后跟任何不同于L或无

的字符

说明

grep options

-anw的长选项格式为:

--text --line-number --word-regexp

--text

由于您的文件是二进制文件,因此您必须添加-a以强制grep将该文件解释为文本。

--line-number

它打印匹配的文本的行号。它满足您的要求。

--word-regexp

此选项排除以REGUL开头的任何匹配(即:REGULAR

答案 1 :(得分:1)

由于您不知道损坏的行,首先找到不是REGULAR的行,然后找到那些REGU行。

此外,您正在搜索二进制文件。因此-a选项

 grep -nva REGULAR file.txt | grep -a REGU

答案 2 :(得分:0)

你可以尝试下面的Perl命令,

perl -nle 'print $. if /(?<![a-zA-Z])REGU(?![A-Za-z])/' file