![使用 sed /unix 命令替换之间的日期 (yyyymmdd)](https://linux22.com/image/167953/%E4%BD%BF%E7%94%A8%20sed%20%2Funix%20%E5%91%BD%E4%BB%A4%E6%9B%BF%E6%8D%A2%E4%B9%8B%E9%97%B4%E7%9A%84%E6%97%A5%E6%9C%9F%20(yyyymmdd).png)
假设我有三个 .dat 文件,如下所示
Psdm_123_20200221.dat
Psdm_20200221.dat
Psdm_acc_20200221_12345667.dat
输出
Psdm_123*.dat
Psdm_*.dat
Psdm_acc_*.dat
答案1
以下sed
命令应该完成该任务:
sed 's/20[0-9]\{2\}\(0[1-9]\|1[012]\)\([012][0-9]\|3[01]\)[^.]*/*/'
如果您sed
理解-r
or-E
选项,您可以省略大部分反斜杠:
sed -r 's/20[0-9]{2}(0[1-9]|1[012])([012][0-9]|3[01])[^.]*/*/'
这将查找带有一些合理性检查的模式“YYYYMMDD”(仅 2000 到 2099 之间的年份、01 - 12 范围内的月份、01 - 31 范围内的天数)并替换它.
以及之后的任何内容,直到但不包括文件扩展名,前提是文件名中在日期之后只有一个文字。这是通过在要替换的表达式中接受“除.
零次或多次之外的所有内容”( ) 来执行的。[^.]*