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 | …
为了得到我们想要的结果,我们添加参数-n
以sort
按数字排序,这将给出10
第一个结果。