文件大小很大,我必须只提取与特定位置代码匹配的行,该位置代码的长度可变(从 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