我的问题是一个命令(如grep,awk),它将输出包含3和3之间数字的行。 8位数。
我理解如何在数字之间进行匹配,例如25和25之间的匹配39 [2-3] [5-9],但我不明白如何输出包含一定数字位数的行。
输入:
1234567
1234
abc
1234567890
1
1AB2345C
输出:
1234567
1234
1AB2345C
答案 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)
您可以通过删除所有非数字来执行此操作,然后检查行长度,例如这里有tr
和awk
:
<infile tr -cd '0-9\n' | awk 'length >= 3 && length <= 8'
输出:
1234567
1234
12345