如何在文件中进行位置搜索并查找在另一个文件中写入包含匹配模式的行

如何在文件中进行位置搜索并查找在另一个文件中写入包含匹配模式的行

文件大小很大,我必须只提取与特定位置代码匹配的行,该位置代码的长度可变(从 2 字节到 8 字节不等)。

我不能使用普通的 grep,因为这可能会产生不良结果。当我搜索 loc cd mas 时,如果我给出grep mas,它与名称 thomas 匹配...

由于这是一个固定长度的文件,我知道要搜索的位置。是否有任何命令可以在特定位置(在我的例子中从 620-628)搜索并提取匹配行?

答案1

sed很适合这个

sed -n '620,628 { /mas/p }'

sed现在,在读完您关心的最后一行后,也可以终止(因此运行得更快);例如

sed -n -e '620,628 { /mas/p }' -e '629q'

对于完整的单词匹配,您可以通过将其括起来来更改表达式\b

例如

sed -n -e '620,628 { /\bmas\b/p }' -e '629q'

现在会匹配this contains mas and stuff但会不是匹配this is a masterful piece of work

答案2

我会尝试

awk '/mas/ && NR >= 620 && NR <= 628' file

在哪里

  • NR(记录数)是行号
  • /mas/正在搜索模式
  • 默认操作是打印该行

答案3

我会尝试

grep -P '^.{620}mas' file

如果您的模式正在改变,您可以使用变量

PAT='mas\b'
grep  -nP "^.{620}$PAT" file

相关内容