我需要grep在文件的某一行(第1行)的某个位置(7-8)有特定字符串("OB")的文件的文件名。
那么最好的方法是什么呢?
发布于 2014-05-15 21:37:04
如何使用head
获取每个文件的第一行,然后使用相应的regexp执行grep
,并输出前面的行以保留文件名:
head -n1 * | grep -EB1 '^.{6}OB'
当然,您必须更改文件选择-这里是*
-以满足您的需求。
更新:问题已更新-如果您只需要文件名,只需添加另一个grep来捕获head
命令给定的文件名:
head -n1 * | grep -EB1 '^.{6}OB' | grep '==>'
发布于 2014-05-15 22:00:56
那使用awk
呢..
awk 'FNR == 1 && /^.{6}OB/ {print FILENAME; nextfile}' *
发布于 2014-05-15 22:12:43
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
https://stackoverflow.com/questions/23679589
复制相似问题