如何在 grep 或 ack 中输出匹配的部分或数字

如何在 grep 或 ack 中输出匹配的部分或数字

demo.txt我有一个如下的文本文件。

This is a line with id (9)
This (8) is another line with id
(10) This is a line with id too
11 This line does nothing

该文件中有一些行的 ID 是随机散布的。ID 模式是带括号的数字。

我的工作是找到这个文件里最大的 id,以便在添加新行时知道下一个 id 是什么。

我以前的工作

ack-grep demo.txt -o --match '\(\d+\)' | sort -r | head -n 1

结果(9)却不如(10)我所愿。我想原因是sort因为有括号,所以将输出视为文本。

问题是:我怎样才能仅输出数字以供ack以后grep排序但仍匹配模式(我的示例中的括号)?

多谢!

答案1

grep不能用于输出匹配的部分,但是为什么不去掉括号呢?

这适用于 GNU grep

grep -P '\(\d+\)' -o demo.txt | sed 's/[()]//g' | sort -nr | head -n1

以下命令也适用于 BSD grep,您可以在 OS X 上使用,例如:

grep -E '\([[:digit:]]+\)' -o demo.txt | …    
grep -E '\([0-9]+\)' -o demo.txt | …

为了得到我们想要的结果,我们添加参数-nsort按数字排序,这将给出10第一个结果。

相关内容