yll*_*ate 7 shell bash zsh shell-script
我有一堆以下格式的文件:
2014-11-19.8.ext
2014-11-26.1.ext
2014-11-26.2.blah.ext
2014-11-26_3.ext
2014-11-26.4.stuff_here.ext
2014-12-03.1. could be anything.ext
2014-12-032b.ext
2014-11-26 613 adva.ext
Run Code Online (Sandbox Code Playgroud)
我的目标是遍历整个文件列表,并从中获取日期格式YYYY-MM-DD
并将其存储在一个变量中以YYYYMMDD
供进一步处理(在我的情况下它将被推送到touch
命令中)。
所以通常我会匹配这个正则表达式: (\d{4})-(\d{2})-(\d{2}).*
然后用于$1$2$3
获取我想要的模式,但是我不确定如何在bash
/ 中执行此操作zsh
。
这如何在 shell 脚本中完成?
使用参数扩展
$ touch 2014-11-19.8.ext 2014-11-26.1.ext
$ for f in *.ext; do d="${f:0:4}${f:5:2}${f:8:2}"; echo "$d"; done
20141119
20141126
Run Code Online (Sandbox Code Playgroud)
${f:0:4}
表示从索引开始的 4 个字符0
,f
是变量名echo "$d"
为您的代码遍历当前目录中的每个文件并将它们的文件名与所需的模式进行比较,然后设置一个包含日期片段的变量
for f in *
do
[[ $f =~ ^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])(.*) ]] &&
yourvar="${BASH_REMATCH[1]}${BASH_REMATCH[2]}${BASH_REMATCH[3]}"
done
Run Code Online (Sandbox Code Playgroud)
这利用了bash[[
使用正则表达式匹配将日期片段放入 BASH_REMATCH 数组的能力。
归档时间: |
|
查看次数: |
4471 次 |
最近记录: |