兼容性测试:

兼容性测试:

我想从 5000 个文件中获取第一列具有特定字符串的行。

文件1

agd fkg fls  ofk
ggs kkg ikg  gkl
bsg ksf olg  lzj
many more lines,,,
kgf kkg ikg  lgk

文件2

gik zlg olg  pzk
ppl sjg gol  dzj
zjg iwj bmh  hgi
many more lines,,,
kgf wlg ugk  lkf

还有更多文件...

输出文件

kgf kkg ikg  lgk
kgf wlg ugk  lkf
more lines...

我想从每个文件中获取一行,第一列的行是某个字符串,例如本例中的“kgf”。

我知道如何仅从一个文件中获取数据,但我无法想出如何从多个文件中获取数据。有人可以教我吗?

答案1

简单地:

grep -rEh '^kgf\b' .

它是递归的:

-r, --recursive 递归地读取每个目录下的所有文件,仅在符号链接位于命令行时才遵循它们。请注意,如果未给出文件操作数,grep 将搜索工作目录。这相当于 -d recurse 选项

或者在当前目录中使用通配符:

grep -Eh '^kgf\b' *

兼容性测试:

  • 与 GNU 配合良好(不足为奇)grep (GNU grep) 3.3
  • 与 FreeBSD 12.1 配合良好grep (GNU grep) 2.5.1-FreeBSD
  • Minix3grep version 0.9-h(以及-E扩展正则表达式和-R递归)开关,但无法识别单词边界 \b但是-w,所以

grep -wh '^kgf' *

或者

grep -h '^kgf ' *

答案2

您可以捕获所有文件并通过管道传输grep

cat file1 file2 file3 | grep "^kgf"

或者如果你想在目录中的所有文件中查找,你可以说

cat * | grep "^kgf"

如果你想查看该目录及其下面的目录中的任何位置,你可以使用

find dirname -type f -exec grep "^kgf" {} \;

相关内容