如何在 AWK 命令中添加多个搜索

如何在 AWK 命令中添加多个搜索

我正在尝试搜索六月、七月和八月创建的文件。我用了这个方法

ls -lrth|awk '/[Jun][Jul][Aug]/ {print}'

但它不起作用。

答案1

您可以匹配多种模式,如下所示:

awk '/Jun/ || /July/ || /Aug/' <(ls -lrh)

这将返回 Jun、July 或 Aug 的所有匹配项。您不需要该print语句,因为这是awk默认操作。

答案2

一般来说,这是一个非常糟糕的主意解析ls的输出。做你想做的事的更好方法是

stat -c "%n %y" * | grep 2013-0[678]

或者,仅检查最后一个字段,以防止出现文件名本身是日期的情况:

stat -c "%n %y" *| awk '$NF ~ /2013-0[678]/' 

man stat

   -c  --format=FORMAT
          use the specified FORMAT instead of the default; output  a  new‐
          line after each use of FORMAT

   %y     time of last modification, human-readable
   %n     file name

答案3

ls是以人类可读的方式显示有关文件的信息的命令。不要在脚本中使用它

在目录树中查找符合特定条件的文件的命令是find。如果您有 GNU find(即非嵌入式 Linux 或 Cygwin)或 FreeBSD find(即 FreeBSD 或 OSX),则可以用来-newermt匹配在特定日期之后最后修改的文件。

find . -newermt '1 June' ! -newermt '1 September' -print

如果您想要匹配特定年份而不是脚本运行时的日历年份的文件,请添加年份。

如果您的查找实现没有-newermt,则必须使用-newer,它将找到的文件的日期find与固定文件进行比较。用于touch创建以要使用的日期为边界的临时文件。

dir=$(mktemp -d)
touch -d 201306010000 "$dir/from"
touch -d 201309010000 "$dir/to"
find . -newer "$dir/from" ! -newer "$dir/to" -print
rm -r "$dir"

相关内容