Unix 使用grep查找一组数字之间的行
我正在为我的班做一个Unix作业,我遇到了一点问题。我们正在尝试输出数字在20-30之间的行 有没有一种方法可以使用Unix 使用grep查找一组数字之间的行,unix,grep,Unix,Grep,我正在为我的班做一个Unix作业,我遇到了一点问题。我们正在尝试输出数字在20-30之间的行 有没有一种方法可以使用grep或egrep,这样您就可以输出一行具有限制的数字,例如20到30之间的数字或小于25的数字?这应该可以做到: grep '\(^\|\D\)\(2[0-9]\|30\)\(\D\|$\)' input 或者,类似地: grep '\(^\|[^0-9]\)\(2[0-9]\|30\)\([^0-9]\|$\)' input 或使用-p标志: grep -P '(^|[^
grep
或egrep
,这样您就可以输出一行具有限制的数字,例如20到30之间的数字或小于25的数字?这应该可以做到:
grep '\(^\|\D\)\(2[0-9]\|30\)\(\D\|$\)' input
或者,类似地:
grep '\(^\|[^0-9]\)\(2[0-9]\|30\)\([^0-9]\|$\)' input
或使用-p
标志:
grep -P '(^|[^0-9])(2[0-9]|30)([^0-9]|$)' input
因此,基本上,考虑您想要匹配的可能字符串,并将其表示为模式。要对20-30之间的值进行grep,您可以使用此选项
egrep -e "[^0-9]2[0-9][^0-9]" -e "[^0-9]30[^0-9]" <file_name>
egrep-e“[^0-9]2[0-9][^0-9]”-e“[^0-9]30[^0-9]”
您可以将这个简单的grep与正则表达式一起使用
$-grep -wE '(2[0-9]|30)' file_name
您可以尝试以下命令:
grep -wE '\b[2]{1}[0-9]{1}\b|30' file
说明:
[2]{1} --> find a number starting with one 2
[0-9]{1} --> The "2" is follored by any number but only repeated once
|30 --> And also finds "30" number.
包容还是排斥?(20,30)或[20,30]?如何用正则表达式表示20-30?(a) 20到29是2后跟任意数字。(b) 30只是30。所以整个范围就是(a)或(b)。任何小于25的数字都将使用类似的构造块。这(regex
”(2[0-9]| 30)
)将拾取2001和其他各种数字。是的,这个表达式拾取2001到20
01的值,我编辑了我的帖子。****谢谢你***。是的,GNUgrep
(和BSDgrep
,但不是POSIX)可以使用-w
选项。这里实际上不需要括号,尽管它们也没有坏处。这(regex2[0-9]
和30
)将拾取2001和其他各种数字,除非当前目录中有一个名为22
的文件,它将拾取22(正确)和222、122、221以及其他类似数字。总是用单引号将正则表达式括起来-为了理智起见。嗨。。。很好的观察。。如果更改了itAFAIK,则假定您有一个版本的grep
,该版本支持Perl regex(PCRE),可在使用PCRE时自动检测。这可能不适用于“Unix”,这是问题的标记。GNUgrep
确实支持PCRE,至少有一个显式的-P
。否则,这个答案是好的。它至少可以避免选择200
和120
以及其他包含两个以上数字的数字。@JonathanLeffler,由于某种原因,这对-P
不正确,有什么想法吗?@JonathanLeffler,明白了,我不应该用-P
逃避一些操作员。GNUgrep
试图自动成为所有人的一切,这使事情变得非常复杂。坦率地说,这没用。我喜欢使用-P
启用PCRE的想法。我想你会发现:grep-P'(^ |\D)(2\D | 30)(\D |$)
或grep-E'(^ |[^0-9])(2[0-9]| 30)([^0-9]|$)
工作。