Linux 具有数字扩展名的Grep文件
考虑一个包含20个文件的目录,编号如下:Linux 具有数字扩展名的Grep文件,linux,bash,grep,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 如何仅在该文件子集中搜索线型?我想对上述三个文件的每一行中的字符串WARNING进行grep。我如何告诉grep将其搜索限
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
如何仅在该文件子集中搜索线型?我想对上述三个文件的每一行中的字符串
WARNING
进行grep
。我如何告诉grep
将其搜索限制为仅此子集?-l
选项用于:列出匹配的文件
-L
选项的作用正好相反:列出不匹配的文件
grep WARNING $(grep -l "Sep 29" *test.dat*)
编辑
我误解了这个问题:你不想在已经包含“Sep 29”的文件上grep“WARNING”,你想在上次修改的文件上grep“WARNING”
因此,我建议:
grep WARNING $(ll *test.dat* | grep "Sep 29")
但我不会依赖于输出。使用:
grep“WARNING”$(ll*test*| grep“Sep 29”)
这样,命令的输出将成为最外层的grep命令的
参数
请记住,由于您在原始命令中使用的是ll
,因此它的输出不仅会提供所需的文件名,还会提供其他文件详细信息(权限、日期等)。您可能需要在“内部”grepgrep
中进行进一步处理,以便传递给最外部的grepgrep
命令的信息将仅限于文件名
此时,考虑使用
find
命令(而不是ll
+grep
)在最内层的子shell中进行文件过滤:使用正确的工具进行作业(:另一种方法:
find . -type f -name "test.dat*" -newermt 2017-09-29 ! -newermt 2017-09-30 -exec grep WARNING {} \;
详细信息
-键入f
:仅搜索文件
-名称“test.dat*”
:仅以“test.dat”开头的文件
-newermt 2017-09-29!-newermt 2017-09-30
:仅修改日期为2017年12月29日的文件
-exec grep WARNING{}\
:每次找到一个文件时,对其执行grep WARNING
,谢谢,我会尝试find
谢谢,但我得到以下find:invalid predicate
-newermt'`不幸的是,您的find
似乎不支持-newermt
:(那么你可以找-mtime
。你需要做一些计算,但这肯定是可行的(之前可能在这里被问过很多次,所以你可以用谷歌搜索)。