首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >仅打印包含三个连续数字的行

问仅打印包含三个连续数字的行
EN

Stack Overflow用户
提问于 2018-10-25 03:59:55
回答 2查看 555关注 0票数 1

我正在过滤一个包含数字和名称的文本文件,我希望只打印包含三个连续数字集的行。输入列表:

代码语言:javascript
复制
123 321 567 765 124 5689 12345.

输出应包含:

代码语言:javascript
复制
123 321 567 765 12345

我已经尝试过这个命令

代码语言:javascript
复制
awk ' {split ("", N) # delete array N 
L = 1 # initialize boolean L to TRUE
for (i=1; i<=length($1); i++){ # for each digit
    P = substr($1, i, 1) 
    if (N[P-1] || N[P+1]){ # if contiguous digit exists, 
        L = 0 break # set L to FALSE; and quit the for loop 
    } N[P] = 1 } } L ' file 

但它并没有像预期的那样工作。

我喜欢使用任何sed、grep或awk命令。

EN

回答 2

Stack Overflow用户

发布于 2018-10-25 08:55:36

这是3个连续(升序或降序)数字的基本正则表达式。

(?:012|123|234|345|456|567|678|789)|(?:987|876|765|654|543|432|321|210)

https://regex101.com/r/hd5PzR/1

你可以用\d*(?:(?:012|123|234|345|456|567|678|789)|(?:987|876|765|654|543|432|321|210))\d*来装饰它

如果需要的话。

https://regex101.com/r/hd5PzR/2

票数 1
EN

Stack Overflow用户

发布于 2018-10-25 05:58:51

你是在寻求家庭作业方面的帮助,还是想解决一个问题?如果是后者,那么在组合如此之少的情况下使用算法方法就像使用链锯切黄油一样。考虑以下脚本:

代码语言:javascript
复制
mystring="012 123 234 567 678 789"
revstring=$(echo $mystring|rev)
checkstring="$mystring $revstring"

for checkno in $(echo $checkstring);
do
        grep $checkno numbers
done

请注意,这将为包含多个序列的行提供重复的输出,但只需通过|sort -u运行该命令即可消除它们。

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

https://stackoverflow.com/questions/52977074

复制
相关文章

相似问题

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