我的文本文件中有几行,如下所示。我想 grep 所有具有类似:100
、:101
至:102
的模式的行:199
。如何获取这些行而不是像这样搜索。:100\|:101\|:102
...
abcd fhijk:123
abcd fhijk:124
abcd fhijk:174
abcd fhijk:225
答案1
假设你的数字总是正整数,没有单位、一元加号或其他修饰。
正则表达式不适合比较数字,但如果您将输入数据视为两个:
分隔的列,则使用以下方法处理它会更容易awk
:
awk -F ':' '$2 >= 100 && $2 <= 199' <file
这会将数据中的第二个:
分隔字段与 100 和 199 进行比较,如果数字在给定范围内,则打印完整行。
它也可以使用grep
,但不那么灵活:
grep ':1[0-9][0-9]$' <file
该表达式匹配和[0-9]
之间的单个字符。将表达式锚定到行尾。0
9
$
如果你想匹配数字 100 到 250 的行,你只需将199
代码更改awk
为250
,但是使用正则表达式,你必须想出
grep -E ':(1[0-9][0-9]|2[0-4][0-9]|250)$' <file
这里,括号的三个部分匹配从 100 到 199,然后从 200 到 249,最后是 250 的数字。(我说“数字”,但正则表达式总是在字符串)。