Unix命令到输出行包含数字之间的命令

时间:2014-06-09 22:43:55

标签: regex unix awk grep

我的问题是一个命令(如grep,awk),它将输出包含3和3之间数字的行。 8位数。

我理解如何在数字之间进行匹配,例如25和25之间的匹配39 [2-3] [5-9],但我不明白如何输出包含一定数字位数的行。


输入:

1234567
1234 
abc
1234567890
1
1AB2345C

输出:

1234567
1234 
1AB2345C

2 个答案:

答案 0 :(得分:3)

这个awk one-liner做到了:

awk '{s=$0}{n=gsub(/[0-9]/,"",s)}n>=3&&n<=8' file

用你的例子测试:

kent$  echo "1234567
1234 
abc
1234567890
1
1AB2345C"|awk '{s=$0}{n=gsub(/[0-9]/,"",s)}n>=3&&n<=8' 
1234567
1234 
1AB2345C

解释

awk                   #awk is a cli powerful text processing tool
'{s=$0}               #read one line, assign to variable s,(leave $0 untouched)
{n=gsub(/[0-9]/,"",s)}#replace all numbers of s to empty,
                      #return the count of replacement was done, assign it to n
n>=3&&n<=8'           #if n between 3 and 8, print the line ($0)

如果说明不能帮助您理解命令,请阅读man / info gawk。

答案 1 :(得分:0)

您可以通过删除所有非数字来执行此操作,然后检查行长度,例如这里有trawk

<infile tr -cd '0-9\n' | awk 'length >= 3 && length <= 8'

输出:

1234567
1234
12345