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

时间:2018-10-24 19:59:55

标签: regex awk sed command-line grep

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

123 321 567 765 124 5689 12345.

输出应包含:

123 321 567 765 12345

我已经尝试过此命令

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命令。

2 个答案:

答案 0 :(得分:0)

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

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来消除它们即可。

答案 1 :(得分:0)

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

<input id="txtMSRP" type="text" value="<your_value>" />

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

您可以用(?:012|123|234|345|456|567|678|789)|(?:987|876|765|654|543|432|321|210)装饰它
如果需要的话。

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