我有一条很大的线条,如下所示
abc|Abc_12 cdf_rhtdm cdf|Cdf22 abc|Abc_100 ijm|smthr12
ddf|rtg_2 qwe_werth ddf|Cs2 abc|Abc_f0 ijm|styhr12 abc|Abc_33 ddf|Cs2 ddf|rtg_2
ddd_hm ddf|Cs2 ght|d_100 abc|Abc_55
cdf_rshtdm sdf|Cdf22 ght|d_100 ijm|smthr12 我想要创建一个新文件,它的模式类似于abc| ,至少有两次。
因此,这里的输出将是
abc|Abc_12 cdf_rhtdm cdf|Cdf22 abc|Abc_100 ijm|smthr12
ddf|rtg_2 qwe_werth ddf|Cs2 abc|Abc_f0 ijm|styhr12 abc|Abc_33 ddf|Cs2 ddf|rtg_2发布于 2013-10-11 13:36:38
使用grep -P (PCRE):
grep -P '(abc\|.*?){2}' file
abc|Abc_12 cdf_rhtdm cdf|Cdf22 abc|Abc_100 ijm|smthr12
ddf|rtg_2 qwe_werth ddf|Cs2 abc|Abc_f0 ijm|styhr12 abc|Abc_33 ddf|Cs2 ddf|rtg_2发布于 2013-10-11 13:37:12
一种方法是在基本正则表达式中使用grep:
grep '^.*\(abc|\).*\(abc|\).*$' your_file
abc|Abc_12 cdf_rhtdm cdf|Cdf22 abc|Abc_100 ijm|smthr12
ddf|rtg_2 qwe_werth ddf|Cs2 abc|Abc_f0 ijm|styhr12 abc|Abc_33 ddf|Cs2 ddf|rtg_2发布于 2013-10-11 13:35:56
使用awk可以很简单地完成:
$ awk '{if (gsub(/abc\|/, "abc", $0)>= 2) print}' file
abcAbc_12 cdf_rhtdm cdf|Cdf22 abcAbc_100 ijm|smthr12
ddf|rtg_2 qwe_werth ddf|Cs2 abcAbc_f0 ijm|styhr12 abcAbc_33 ddf|Cs2 ddf|rtg_2解释
来自AWK手册
gsub(regexp,替换,目标) gsub函数返回所做的替换数。
因此,我们检查它的返回代码,如果它是2或更多,我们打印这一行。
https://stackoverflow.com/questions/19319514
复制相似问题