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