【发布时间】:2014-03-21 10:55:34
【问题描述】:
我需要从文件中 grep 模式,但需要它们。
$ cat patt.grep
name1
name2
$ grep -f patt.grep myfile.log
name2:some xxxxxxxxxx
name1:some xxxxxxxxxx
我得到的输出是首先找到 name2 它被打印然后找到 name1 它也被打印。但我的要求是按照 patt.grep 文件的顺序先获取 name1。
我期望输出为
name1:some xxxxxxxxxx
name2:some xxxxxxxxxx
【问题讨论】:
-
@devnull 可能 patt.grep 中的模式未排序,OP 希望它们按 patt.grep 中的顺序排序。不幸的是,该示例可能具有误导性。
-
@mockinterface 但它的排序似乎就像看到
$ cat patt.grep的输出一样 -
@JKB 我敢打赌它是未排序的。可以说这是经过多年阅读需求编写者的想法后产生的预感。会去睡觉,早上发现:)
-
@Sriharsha Kalluru 试试
$ grep -f patt.grep myfile.log | sort -u -
这个命令的输出是在
myfile.log中出现的行的顺序,而不是patt.grep中的模式的顺序。name2在name1之前出现在myfile.log中。grep一次遍历要搜索的文件一行,并将每一行与所有模式进行比较。如果您希望按模式顺序运行,则必须重复运行grep,每个模式一次。