如何在grep中获取10-20范围内的数字
How to get number in range 10-20 in grep
我需要从此文件中提取以 10-20 范围内的数字开头的行,我尝试使用 grep "[10-20]" tmp_file.txt,但来自具有这种格式的文件
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.aa
12.bbb
13.cccc
14.ddddd
15.eeeeee
16.fffffff
17.gggggggg
18.hhhhhhhhh
19.iiiiiiiiii
20.jjjjjjjjjjj
21.
它返回所有内容并标记每个包含 1、0、10、2、0、20 或 21 的数字:/
使用扩展正则表达式 (-E
):
grep -E '^(1[0-9]|20)\.' file
输出:
10.aa
12.bbb
13.cccc
14.ddddd
15.eeeeee
16.fffffff
17.gggggggg
18.hhhhhhhhh
19.iiiiiiiiii
20.jjjjjjjjjjj
参见:The Stack Overflow Regular Expressions FAQ
另一个用awk
awk '/^10\./,/^20\./' tmp_file.txt
awk '/^10\./,/^13\./' tmp_file.txt
10.aa
12.bbb
13.cccc
尝试
grep -w -e '^1[[:digit:]]' -e '^20' tmp_file.txt
-w
强制匹配整个单词。这会阻止像 100...
这样的匹配行。它不是 POSIX,但现在大多数人遇到的每个 grep
都支持它。如果您担心便携性,请使用 grep -e '^1[[:digit:]]\.' -e '^20\.' ...
。
- 可以多次使用
-e
选项来指定多个模式。
[[:digit:]]
可能比[0-9]
更可靠。参见 In grep command, can I change [:digit:] to [0-9]?。
grep 不是用于此的工具,因为 grep 查找文本模式,但不理解数值。制作与 10-20 中的 11 个值匹配的图案就像用螺丝刀搅拌一罐油漆。你可以做到,但它不是完成这项工作的正确工具。
更清晰的方法是使用 Perl:
$ perl -n -e'print if /^(\d+)/ && >= 10 && <= 20' foo.txt
这表示如果行的开头 ^
匹配一个或多个数字 \d+
并且如果匹配的数值
是介于 10 和 20 之间。
假设文件可能未排序并使用数字比较
awk -F. ' >= 10 && <= 20' < file.txt
我需要从此文件中提取以 10-20 范围内的数字开头的行,我尝试使用 grep "[10-20]" tmp_file.txt,但来自具有这种格式的文件
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.aa
12.bbb
13.cccc
14.ddddd
15.eeeeee
16.fffffff
17.gggggggg
18.hhhhhhhhh
19.iiiiiiiiii
20.jjjjjjjjjjj
21.
它返回所有内容并标记每个包含 1、0、10、2、0、20 或 21 的数字:/
使用扩展正则表达式 (-E
):
grep -E '^(1[0-9]|20)\.' file
输出:
10.aa 12.bbb 13.cccc 14.ddddd 15.eeeeee 16.fffffff 17.gggggggg 18.hhhhhhhhh 19.iiiiiiiiii 20.jjjjjjjjjjj
参见:The Stack Overflow Regular Expressions FAQ
另一个用awk
awk '/^10\./,/^20\./' tmp_file.txt
awk '/^10\./,/^13\./' tmp_file.txt
10.aa
12.bbb
13.cccc
尝试
grep -w -e '^1[[:digit:]]' -e '^20' tmp_file.txt
-w
强制匹配整个单词。这会阻止像100...
这样的匹配行。它不是 POSIX,但现在大多数人遇到的每个grep
都支持它。如果您担心便携性,请使用grep -e '^1[[:digit:]]\.' -e '^20\.' ...
。- 可以多次使用
-e
选项来指定多个模式。 [[:digit:]]
可能比[0-9]
更可靠。参见 In grep command, can I change [:digit:] to [0-9]?。
grep 不是用于此的工具,因为 grep 查找文本模式,但不理解数值。制作与 10-20 中的 11 个值匹配的图案就像用螺丝刀搅拌一罐油漆。你可以做到,但它不是完成这项工作的正确工具。
更清晰的方法是使用 Perl:
$ perl -n -e'print if /^(\d+)/ && >= 10 && <= 20' foo.txt
这表示如果行的开头 ^
匹配一个或多个数字 \d+
并且如果匹配的数值 是介于 10 和 20 之间。
假设文件可能未排序并使用数字比较
awk -F. ' >= 10 && <= 20' < file.txt