使用 sed /unix 命令替换之间的日期 (yyyymmdd)

使用 sed /unix 命令替换之间的日期 (yyyymmdd)

假设我有三个 .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理解-ror-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 范围内的天数)并替换它.以及之后的任何内容,直到但不包括文件扩展名,前提是文件名中在日期之后只有一个文字。这是通过在要替换的表达式中接受“除.零次或多次之外的所有内容”( ) 来执行的。[^.]*

相关内容