Grep 查找括号中的数字范围

Grep 查找括号中的数字范围

我试图仅查找括号内的一系列数字。我当前的 grep 会将括号内的所有内容拉出,但我只想要[0001-9999].我怎样才能修复我的 grep 来做到这一点?

我尝试了几个不同的版本(?<=\()[0001-9999](?=\)),但它们没有返回任何内容

$ cat /tmp/output
This is R3trans version 6.26 (release 745 - 24.03.17 - 20:17:03).
R3trans finished (0000).
R3trans finished (0001).
R3trans finished (9999).
05.03.2018 16:30:02
enserver, EnqueueServer, RED, Running, 2018 02 27 09:15:52, 151:14:10, 19069

电流输出

$ cat /tmp/output | grep -Po '(?<=\().*(?=\))'
release 745 - 24.03.17 - 20:17:03
0000
0001
9999

所需输出

$ cat /tmp/output | grep -Po '(?<=\().*(?=\))'
0001
9999

答案1

实现目标的两种方法:

grep方法(与珀尔支持):

grep -Po '\(\K(?!0000)([0-9]{4})(?=\))' /tmp/output

GNUawk方法:

awk -v FPAT='\\([0-9]{4}\\)' '$1{ n = substr($1,2,4); if (int(n) > 0) print n }' /tmp/output

输出:

0001
9999

答案2

显然你有数字限制。如果是这样的话,为什么不使用编程语言呢?例子:

perl -nE '/\((\d{4})\)/ and $1 > 0 and say $1'

答案3

这似乎有效:

grep -Eo '[0-9]{4}' /path/to/file | grep -v '0000'

可读性较差,但只有一个grep

grep -Eo '[0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]|[0-9][1-9][0-9]{2}|[1-9][0-9]{3}' /path/to/file

相关内容