Jul 22
我想从输出中提取拉伸:
-rw-rw-r-- 1 douglas douglas 92188 Jul 22 08:47 master-terfron-21-07.log
这是该命令的输出:
ls -l *.log
我如何使用正则表达式来获取所需的部分?
答案1
.log
由于您只想要当前目录中文件的最后修改时间(月份和日期),因此您可以简单地使用-r
选项date
。无需任何正则表达式或其他多余的命令。
您可以使用这个 shell 单行命令:
for i in *.log; do echo "$i: $(date '+%b-%d' -r "$i")"; done
.txt
例如,我查找当前目录中所有文件的最后修改月份和日期:
$ for i in *.txt; do echo "$i: $(date '+%b-%d' -r "$i")"; done
file.txt: Feb-12
new.txt: Jul-23
这里涉及的主要命令是:
date '+%b-%d' -r file.txt
$ date '+%b-%d' -r file.txt
Feb-12
如果要递归执行操作,请使用find
:
find . -type f -name '*.txt' -printf '%p: ' -exec date '+%b-%d' -r {} \;
例子 :
$ find . -type f -name '*.txt' -printf '%p: ' -exec date '+%b-%d' -r {} \;
./foo/list.txt: Jul-16
./new.txt: Jul-15
./file.txt: Jul-23
编辑 :
为了以原始regex
方式回答:
$ ls -l *.txt | grep -Po '.*[[:digit:]]+ \K[[:alpha:]]{3} [[:digit:]]{2}'
Jul 23
Jul 15
grep -Po
表示我们将使用 PCRE 并仅取匹配的部分.*[[:digit:]]+
匹配到我们想要的部分并\K
丢弃匹配[[:alpha:]]{3} [[:digit:]]{2}
匹配三个字母字符(月份)后跟一个空格和两个数字(日期)。
答案2
要获取文件的最后修改日期,您可以使用:
$ stat -c '%n: %y' *.log
alternatives.log: 2015-07-20 09:28:52.727063510 +0200
apport.log: 2015-07-23 09:32:58.282590564 +0200
查看stat
手册页以了解更多选项。
答案3
一个更简单的解决方案是ls
使用cut
:
ls -l filename | cut -f 6,7 -d' '
例子:
$ touch file
$ ls -l file | cut -f 6,7 -d' '
Jul 23
另一个解决方案:
ls -l filename |awk {'print $9" was last modified "$6" "$7'}