我们知道,sed, grep,awk都支持正则表达式,但支持力度显然没有Perl这样语言强。 有的时候如果对字符串来匹配其中的日期,可能会找不到,这个时候使用-P参数可能会收到很好的效果。
比如:10101010222222_a_b_20190108102030_1234.zip这样的文件,前面数字有14位,其中日期也是14位,如果使用\d{14}会匹配出两个,而且grep还不支持\d格式要写成[0-9]格式。 这个时候使用-P参数可以达到目的
[root@host ~] # s="10101010222222_a_b_20190108102030_1234.zip"
[root@host ~] # echo $s | grep -oP '(20|19)\d{2}[01]\d{9}'
20190108102030
备注:
- -o # 刚好显示匹配到的内容
- -P # 以支持Perl的正则匹配内容来显示内容,但有时候版本不同,可能会报错
- (20|19)\d{2}[01]\d{9} # 可以比较精确日期,过滤掉前面一个14位的数字
如果不用-P参数的,替代方案可以是:
[root@host ~] # s="10101010222222_a_b_20190108102030_1234.zip"
[root@host ~] # echo $s | egrep -o '(20|19)[0-9]{2}[01][0-9]{9}'
20190108102030