命令行 grep * 不起作用但 grep *. 可以工作

命令行 grep * 不起作用但 grep *. 可以工作

为什么“staff*22”没有显示任何内容,而“staff.*22”列出了包含 staff 后跟 22 的行,尽管其中任何一行都不包含“.”?

$ ls -l | grep "staff*22"
$ ls -l | grep "staff.*22"
drwxrwxr-x  2 kim  staff   68 Jan 12 22:23 hihi
drwxrwxrwx  4 kim  staff  136 Jan 12 22:29 temp2
drwxrwxrwx  3 kim  staff  102 Jan 12 22:41 tes2

答案1

给定的 grep 命令做什么

从您的输出中可以明显看出,您想要查找属于“staff”组且在 22 点(或 12 小时制的晚上 10 点)创建的所有文件。我们将在下面讨论这个问题,但首先让我们弄清楚您的grep命令的作用以及为什么它们不是满足您需求的正确工具。

首先,grep你执行的两个命令在解释方式上略有不同,而且你的方法不正确——你不应该尝试解析 ls 的输出

  • grep "staff*22"读作“匹配所有以‘staf’开头的行,并且可能有或可能没有额外的‘f’,后面紧跟着‘22’。”

    $ echo "staff whatever 22" | grep 'staff*22'               
    $ echo "staff22" | grep 'staf*22'                          
    staff22
    $ echo "staf22" | grep 'staff*22'                         
    staf22
    $ echo "staf22" | grep 'staff*22'
    staf22
    
  • grep "staff.*22"读作“匹配所有包含‘staff’、其间有零个或多个字符(任何类型的字符)以及数字 22 的行”。

    $  echo "staff whatever 22" | grep 'staff.*22'                                                                           
    staff whatever 22
    

更好的方法

ls命令通常只用于交互式列表,即当您只想快速查看文件夹内的内容时。当需要查找特定文件或通过脚本处理这些文件时,find命令是最佳选择。它具有-group变量,可帮助您隔离属于组的所有文件staff,并-nevermt查找修改时间晚于某个特定日期的文件。例如,您想要的可能是:

find . -group staff -newermt "2017-01-12 21:59:59" 

另请参阅:https://superuser.com/questions/580273/ubuntu-linux-find-files-between-specific-times

相关内容