首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >找到至少两次重复图案的线条?

找到至少两次重复图案的线条?
EN

Stack Overflow用户
提问于 2013-10-11 13:33:35
回答 4查看 7.6K关注 0票数 3

我有一条很大的线条,如下所示

代码语言:javascript
复制
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| ,至少有两次

因此,这里的输出将是

代码语言:javascript
复制
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
EN

回答 4

Stack Overflow用户

发布于 2013-10-11 13:36:38

使用grep -P (PCRE):

代码语言:javascript
复制
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
票数 2
EN

Stack Overflow用户

发布于 2013-10-11 13:37:12

一种方法是在基本正则表达式中使用grep

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2013-10-11 13:35:56

使用awk可以很简单地完成:

代码语言:javascript
复制
$ 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或更多,我们打印这一行。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19319514

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档