如何 grep 字符串的某个区域?

如何 grep 字符串的某个区域?

我有一个包含超过 4000 个字符的文件,我想 grep 位置 148 和 1824 之间的字符串。我该怎么做?

答案1

你不用grep。有一个工具就是专门为此类事情而设计的:cut.要获取字符 148 到 1824,请执行以下操作:

cut -c 148-1824 file

-c标志表示选择字符。-b如果您想处理字节,请使用。

如果你坚持使用grep,你将不得不做这样的事情(假设GNU grep)

grep -Po '^.{147}\K.{1675}' file

这将匹配前 147 个字符 ( ^.{147}) 并丢弃它们 ( \K)。然后它匹配接下来的 1675 个字符。该-o标志告诉grep我们只打印一行的匹配部分,并且该-P标志打开与 perl 兼容的正则表达式,让我们可以使用\K.

答案2

下面的命令将执行相同的操作。我测试了一下,效果很好。它提取从第 148 位到第 1824 位的所有字符。

awk '{print substr($0,148,1676)}' filename

substr($0,148,1676)}将获取当前行 ( $0) 的子字符串,从第 148 个字符开始,一直持续到位置 148 + 1676 处的字符。这意味着它在位置 1824 处结束。

答案3

要“grep”文件中每行的一个小节,请使用 awk 提取该小节,然后将该节与正则表达式进行比较。

一个简化的例子:

$ cat input
junkjeffjunk

$ awk '{ piece=substr($0, 5, 4); if (piece ~ /jeff/) print piece; }' input
jeff

对于你的情况:

awk '{ piece=substr($0, 148, 1676); if (piece ~ /your-regex-here/) print piece; }' input

相关内容