Regex 如何计算文本文件中以日期开头的行数

Regex 如何计算文本文件中以日期开头的行数,regex,bash,clearcase,wc,Regex,Bash,Clearcase,Wc,我有一个文件,其内容如下 2004-10-07 cva create file ... 2003-11-11 cva create version ... 2003-11-11 cva create version ... 2003-11-11 cva create branch ... 现在我想计算这个特定文件中以日期开头的行数。 我该怎么做 如果我使用wc-l 它给出了行的总数(在我的例子中是5行,而我

我有一个文件,其内容如下

2004-10-07     cva        create file ...
2003-11-11     cva        create version ...
2003-11-11     cva        create version ...
2003-11-11     cva        create branch ...
现在我想计算这个特定文件中以日期开头的行数。 我该怎么做

如果我使用
wc-l


它给出了行的总数(在我的例子中是5行,而我想要的是计数应该是4行)

一种简单易行的方法:Perl

2004-10-07     cva 
2004-10-04             
anything
2004-10-07     cva 
anything
2004-10-07     cva 
2004-10-07     cva 
1  
2  
2  
3  
3  
4  
5  
您的文件

2004-10-07     cva 
2004-10-04             
anything
2004-10-07     cva 
anything
2004-10-07     cva 
2004-10-07     cva 
1  
2  
2  
3  
3  
4  
5  
您需要
perl-lne'++$n if/^\d+-\d+-\d+/;打印$n'您的文件

输出

2004-10-07     cva 
2004-10-04             
anything
2004-10-07     cva 
anything
2004-10-07     cva 
2004-10-07     cva 
1  
2  
2  
3  
3  
4  
5  

计数并仅打印总和
perl-lne'++$n if/^\d+-\d+-\d+/;结束{print$n}您的文件

输出
5


使用egrep
-c
计算匹配号码
cat您的文件| egrep-c'^[0-9]+-[0-9]+-[0-9]+'

输出

5

一种简单易用的方法:Perl

2004-10-07     cva 
2004-10-04             
anything
2004-10-07     cva 
anything
2004-10-07     cva 
2004-10-07     cva 
1  
2  
2  
3  
3  
4  
5  
您的文件

2004-10-07     cva 
2004-10-04             
anything
2004-10-07     cva 
anything
2004-10-07     cva 
2004-10-07     cva 
1  
2  
2  
3  
3  
4  
5  
您需要
perl-lne'++$n if/^\d+-\d+-\d+/;打印$n'您的文件

输出

2004-10-07     cva 
2004-10-04             
anything
2004-10-07     cva 
anything
2004-10-07     cva 
2004-10-07     cva 
1  
2  
2  
3  
3  
4  
5  

计数并仅打印总和
perl-lne'++$n if/^\d+-\d+-\d+/;结束{print$n}您的文件

输出
5


使用egrep
-c
计算匹配号码
cat您的文件| egrep-c'^[0-9]+-[0-9]+-[0-9]+'

输出
5

给定:

$ cat file
2004-10-07     cva        create file ...
no date
2003-11-11     cva        create version ...
no date
2003-11-11     cva        create version ...
no date
2003-11-11     cva        create branch ...
首先了解如何在文件的每一行上运行正则表达式。假设您使用
sed
,因为它相当标准和快速。您还可以使用
awk
grep
bash
perl

下面是一个
sed
解决方案:

$ sed -nE '/^[12][0-9]{3}-[0-9]{2}-[0-9]{2}/p' file
2004-10-07     cva        create file ...
2003-11-11     cva        create version ...
2003-11-11     cva        create version ...
2003-11-11     cva        create branch ...
然后将其输送至
wc

$ sed -nE '/^[12][0-9]{3}-[0-9]{2}-[0-9]{2}/p' file | wc -l
      4
$ awk '/^[12][0-9]{3}-[0-9]{2}-[0-9]{2}/{lc++} END{ print lc }' file
4
或者,您可以在
awk
中使用相同的模式,而不需要使用
wc

$ sed -nE '/^[12][0-9]{3}-[0-9]{2}-[0-9]{2}/p' file | wc -l
      4
$ awk '/^[12][0-9]{3}-[0-9]{2}-[0-9]{2}/{lc++} END{ print lc }' file
4
或者,使用
grep
,使用相同的模式:

$ grep -cE '^[12][0-9]{3}-[0-9]{2}-[0-9]{2}' file
4

(注意:不清楚您的日期格式是
YYYY-MM-DD
还是
yyy-DD-MM
如果已知,您可以使模式更加具体。)

给定:

$ cat file
2004-10-07     cva        create file ...
no date
2003-11-11     cva        create version ...
no date
2003-11-11     cva        create version ...
no date
2003-11-11     cva        create branch ...
首先了解如何在文件的每一行上运行正则表达式。假设您使用
sed
,因为它相当标准和快速。您还可以使用
awk
grep
bash
perl

下面是一个
sed
解决方案:

$ sed -nE '/^[12][0-9]{3}-[0-9]{2}-[0-9]{2}/p' file
2004-10-07     cva        create file ...
2003-11-11     cva        create version ...
2003-11-11     cva        create version ...
2003-11-11     cva        create branch ...
然后将其输送至
wc

$ sed -nE '/^[12][0-9]{3}-[0-9]{2}-[0-9]{2}/p' file | wc -l
      4
$ awk '/^[12][0-9]{3}-[0-9]{2}-[0-9]{2}/{lc++} END{ print lc }' file
4
或者,您可以在
awk
中使用相同的模式,而不需要使用
wc

$ sed -nE '/^[12][0-9]{3}-[0-9]{2}-[0-9]{2}/p' file | wc -l
      4
$ awk '/^[12][0-9]{3}-[0-9]{2}-[0-9]{2}/{lc++} END{ print lc }' file
4
或者,使用
grep
,使用相同的模式:

$ grep -cE '^[12][0-9]{3}-[0-9]{2}-[0-9]{2}' file
4

(注意:不清楚您的日期格式是
YYYY-MM-DD
还是
yyy-DD-MM
如果已知,您可以使模式更具体。)

grep“[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}”文件名| wc l
应给出此特定格式的行数。但是,使用awk会更好。
grep“[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}”文件名| wc-l
应该给出此特定格式的行数。但是,使用awk会更好。