我的行有大行,如下所示
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
答案 0 :(得分:2)
使用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
答案 1 :(得分:2)
一种方法是将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
答案 2 :(得分:0)
使用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
gsub(regexp,replacement,target)
gsub函数返回所做的替换次数。
所以我们检查它的返回码,如果它是2或更多,我们打印该行。
答案 3 :(得分:0)
以下正则表达式应该产生您正在寻找的输出......
.*?(abc\|).*?(abc\|).*?