为什么下面不输出两行?
$ cat tmp
c9::dsk/c9t5000CCA23B2C6A65d0
c10::dsk/c10t5000C50086135011
$ cat tmp | perl -ne 'print "$1\n" if /(c\d\d?t[A-Z0-9]{15,16}d0)/'
c9t5000CCA23B2C6A65d0
第二个\d
是可选的,所以它允许c10
,长度在15到16个字符之间,所以应该没问题?
答案 0 :(得分:2)
为什么下面不输出两行?
因为第二行不以d0
结尾,所以从模式中删除它。
长度在15到16个字符之间,所以应该没问题?
c\d\d?t
之后的子串的长度分别为18和16:
5000CCA23B2C6A65d0
5000C50086135011
所以改成它:
cat tmp | perl -ne 'print "$1\n" if /(c\d\d?t[A-Z0-9]{16,18})/'
答案 1 :(得分:2)
我认为你的数据看起来像是
c
一位或两位小数
t
十六位十六进制数字
可选地,d0
要捕获的模式看起来像/(c\d{1,2}t\p{hex}{16}(?:d0)?)/
答案 2 :(得分:1)
试试这个:
cat tmp | perl -ne 'print "$1\n" if /(c\d+t[A-Z0-9]{16,18}(d0)?)/'
c9t5000CCA23B2C6A65d0
c10t5000C50086135011