Grep文件的数字扩展名

时间:2017-09-29 11:44:47

标签: linux bash grep

考虑一个20个文件的目录,编号如下:

ll *test*
> test.dat
> test.dat.1
> test.dat.2
...
> test.dat.20

可以通过

找到与给定日期匹配的文件子集
ll *test* | grep "Sep 29"
> test.dat
> test.dat.1
> test.dat.2

如何在 ONLY 这个文件子集中搜索线条模式?我想grep为上述三个文件的每一行中的字符串WARNING。如何告诉grep将其搜索范围限制为仅此子集?

3 个答案:

答案 0 :(得分:2)

-l选项用于:匹配

的列表文件

-L选项则相反:列出不匹配的文件

grep WARNING $(grep -l "Sep 29" *test.dat*)

修改

我误解了这个问题:你不想要问候"警告"对于已经包含" 9月29日和#34;的文件,你想要grep"警告"在9月29日最后修改的文件。

因此我建议:

grep WARNING $(ll *test.dat* | grep "Sep 29")

但我不会依赖ll输出。

答案 1 :(得分:1)

使用subshell

grep "WARNING" $(ll *test* | grep "Sep 29")

这样,您的命令输出将成为最外层<files_to_search_in>命令的grep参数。

请记住,由于您在原始命令中使用ll,因此它的输出不仅会为您提供所需的文件名,还会为您提供其他文件详细信息(权限,日期等)。您可能需要在“内部”grep中进行进一步处理,以便传递给最外层grep命令的信息将仅限于文件名。

在此期间,考虑使用find命令man page)而不是ll的组合,在最内层的子shell中进行文件过滤+ grep:使用正确的工具(

答案 2 :(得分:0)

另一种方法:

find . -type f -name "test.dat*" -newermt 2017-09-29 ! -newermt 2017-09-30 -exec grep WARNING {} \;

<强>详情

-type f:仅搜索文件

-name "test.dat*":仅以“test.dat”开头的文件

-newermt 2017-09-29 ! -newermt 2017-09-30:仅包含修改日期= 29 2017年9月的文件

-exec grep WARNING {} \;:每次找到文件时,在其上执行grep WARNING