我正在尝试编译一个简单的bash脚本。它应该搜索名称与提供的模式匹配的文件(模式作为参数提供)并列出文件的几个第一行。所有文件都在一个目录中。
我知道我应该使用head -n 3
来列出文件的前几行,但我不知道如何搜索提供的模式以及如何将它们放在一起。
非常感谢您的所有答案。
答案 0 :(得分:2)
不需要,shell会为你做模式:
head -3 *.c
==> it.c <==
#include<stdio.h>
int main()
{
==> sem.c <==
#include <stdio.h> /* printf() */
#include <stdlib.h> /* exit(), malloc(), free() */
#include <sys/types.h> /* key_t, sem_t, pid_t */
==> usbtest.c <==
另一个例子:
head -3 file[0-9]
==> file1 <==
file1 line 1
file1 line 2
file1 line 3
==> file2 <==
file2 line 1
file2 line 2
file2 line 3
==> file9 <==
file9 line 1
file9 line 2
file9 line 3
答案 1 :(得分:2)
Bash有一个globstar
选项,设置后可以使用**
来搜索子目录:
head -3 **/mypattern*.txt
要设置globstar,您可以将以下内容添加到.bashrc:
shopt -s globstar
答案 2 :(得分:1)
find . -type f -name 'mypattern*.txt' -exec head -n 3 {} \;
如果不希望下载到子目录中,请在-maxdepth 0
之前添加-exec
。