grep用于包含特定位置的特定行中的特定文本的文件

时间:2014-05-15 13:23:57

标签: regex linux grep

我需要grep文件的文件名,这些文件在文件的某一行(第1行)的某个位置(7-8)有某些字符串(" OB")。

最好的方法是什么。

3 个答案:

答案 0 :(得分:2)

如何使用head获取每个文件的第一行,然后使用相应的正则表达式grep并输出该行以保留文件名:

head -n1 * | grep -EB1 '^.{6}OB'

当然,您必须更改文件选择 - 此处* - 以满足您的需求。

更新:问题已更新 - 如果您只想要文件名,只需添加另一个grep来捕获head命令提供的文件名:

head -n1 * | grep -EB1 '^.{6}OB' | grep '==>'

答案 1 :(得分:2)

使用awk ..

怎么样?
awk 'FNR == 1 && /^.{6}OB/ {print FILENAME; nextfile}' *

答案 2 :(得分:0)

awk对这项工作可能更好:

line=1
pos=7
len=2
awk "FNR==${line} && substr(\$0,${pos},${len})=='OB'{print FILENAME}" myfiles

或者:

awk -vl=${line} -vp=${pos} -vn=${len} 'FNR==l && substr($0,p,n)=="OB"{print FILENAME}' myfiles