我有一个包含超过 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