我需要grep文件的文件名,这些文件在文件的某一行(第1行)的某个位置(7-8)有某些字符串(" OB")。
最好的方法是什么。
答案 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