Rok*_*uta 1 command-line regex
我想Jul 22从输出中提取拉伸:
-rw-rw-r-- 1 douglas douglas 92188 Jul 22 08:47 master-terfron-21-07.log
Run Code Online (Sandbox Code Playgroud)
这是命令的输出:
ls -l *.log
Run Code Online (Sandbox Code Playgroud)
我将如何使用正则表达式来获取所需的部分?
当你只想要的最后修改时间(月,日).log在当前目录下的文件,你可以简单地使用-r的选项date。不需要任何正则表达式或其他多余的命令。
您可以使用此外壳单线:
for i in *.log; do echo "$i: $(date '+%b-%d' -r "$i")"; done
Run Code Online (Sandbox Code Playgroud)
例如,我正在查找.txt当前目录中所有文件的上次修改的月份和日期:
$ for i in *.txt; do echo "$i: $(date '+%b-%d' -r "$i")"; done
file.txt: Feb-12
new.txt: Jul-23
Run Code Online (Sandbox Code Playgroud)
这里涉及的主要命令是:
date '+%b-%d' -r file.txt
$ date '+%b-%d' -r file.txt
Feb-12
Run Code Online (Sandbox Code Playgroud)
如果要递归执行操作,请使用find:
find . -type f -name '*.txt' -printf '%p: ' -exec date '+%b-%d' -r {} \;
Run Code Online (Sandbox Code Playgroud)
例子 :
$ 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
Run Code Online (Sandbox Code Playgroud)
编辑 :
为了回答原来的regex方式:
$ ls -l *.txt | grep -Po '.*[[:digit:]]+ \K[[:alpha:]]{3} [[:digit:]]{2}'
Jul 23
Jul 15
Run Code Online (Sandbox Code Playgroud)
grep -Po 表示我们将使用 PCRE 并且只取匹配的部分
.*[[:digit:]]+匹配到我们想要的部分并\K丢弃匹配
[[:alpha:]]{3} [[:digit:]]{2} 匹配三个字母字符(月)后跟一个空格和两个数字(日期)。