Grep 如何搜索在特定日期之间修改的Linux文件的内容

Grep 如何搜索在特定日期之间修改的Linux文件的内容,grep,find,full-text-search,Grep,Find,Full Text Search,我想搜索一个目录(不包括包含任何特定单词的路径,最好是正则表达式模式),并找到所有内容与我的查询匹配的文件(最好是正则表达式模式,我会使其不区分大小写),并且在两个特定日期之间进行了修改 基于,我当前的命令是: find /mnt/c/code -type f -mtime -100 -mtime +5 -print0 | xargs -0 grep -l -v "firstUnwantedTerm" 'mySearchTerm' 显然,此查询并不排除包含“firstUnw

我想搜索一个目录(不包括包含任何特定单词的路径,最好是正则表达式模式),并找到所有内容与我的查询匹配的文件(最好是正则表达式模式,我会使其不区分大小写),并且在两个特定日期之间进行了修改

基于,我当前的命令是:

find /mnt/c/code -type f -mtime -100 -mtime +5 -print0 |
xargs -0 grep -l -v "firstUnwantedTerm" 'mySearchTerm'
显然,此查询并不排除包含“firstUnwantedTerm”的所有路径

另外,我希望结果可以按修改的日期时间降序排序,显示:他们修改的时间、完整的文件名和搜索查询(可能在控制台中使用不同的颜色),并在上下文中显示


grep-rnwl--exclude='*firstUnwantedTerm*''/mnt/c/code'-e“mySearchTerm”
from似乎也是朝着正确方向迈出的一步,因为它似乎正确地排除了我的排除项,但它不按修改后的日期时间过滤,也不输出所有需要的字段,当然。

这只是快速和肮脏,没有按日期排序,但在每次匹配和彩色匹配之前/之后有3行上下文:

find~/mnt/c/code-type f-mtime-100-mtime+5 | grep-v'someUnwantedPath'| xargs-I'{}'sh-c“ls-l'{}'和&grep-color-c3-h'mySearchTerm'{}'
将其分解为若干部分,并给出一些解释:

#查找100到5天之间的常规文件(修改时间)
查找~/mnt/c/code-type f-mtime-100-mtime+5|
#从列表中删除不需要的文件
grep-v“someUnwantedPath”|
#列出每个文件,然后在每个文件中查找搜索词,
#突出显示匹配项和
#在每个匹配的上方和下方显示3行上下文
xargs-I'{}'sh-c“ls-l'{}'&&grep--color-c3-h'mySearchTerm'{}'
我想你可以从这里开始。当然,这可以变得更漂亮,并满足您的所有要求,但我只有几分钟的时间,让UNIX专家来击败我,让整个事情变得更好200%


更新:第2版,不带
xargs
,只带一个
grep
命令:

find~/mnt/c/code-type f-mtime-30-mtime+25-路径“*someUnwantedPath*”-exec stat-c“%y%s%n”{}-execgrep--color-c3-h'mySearchTerm'{}\;
-路径“*someUnventedPath*”
过滤掉不需要的路径,两个
-exec
子命令列出候选文件,然后显示
grep
结果(也可以是空的),就像前面一样。请注意,我从使用
ls-l
更改为
stat-c“%y%s%n”
,以便列出文件日期、大小和名称(只需根据需要修改)

此外,为了便于阅读,还增加了换行符:

find~/mnt/c/code
-f型
-mtime-30-mtime+25
! -路径“*someUnwantedPath*”
-exec stat-c“%y%s%n”{};
-execgrep--color-c3-h'mySearchTerm'{}\;

我很感激这个提示。更新:添加了不带
xargs
的解决方案,用于过滤不需要的路径,使用
-exec
子命令和
stat
而不是
ls
。我想知道你为什么不接受我的答案,你唯一的反馈是“谢谢你的提示”。如果答案不可接受,为什么不提供更具限定性的反馈,告诉我问题出在哪里,或者用更好的解决方案编写自己的答案?当然,有很多额外的代码,可以按修改日期排序,但
按路径名查找
列表,因此需要更多的转换、缓存,可能会重新访问同一个文件等,所以这不是一个简单的单行程序,更适合于一个特殊的shell脚本。我觉得这不值得付出努力,只是为了让输出更漂亮。我不回答很多赏金问题,但我想发生的是我自动得到了一半赏金,因为即使你没有接受答案,也没有手动将赏金分配给我,答案有足够的票数来解释部分悬赏。也许这是写在更详细的地方,但我也不是这方面的专家。