unix 如何限制从grep返回的结果数?

68bkxrlz  于 2022-11-04  发布在  Unix
关注(0)|答案(6)|浏览(345)

我想说的是grep最多10行。
我不想让我的电脑工作得太辛苦。我想让它在grep找到10个结果后停止工作。这可能吗?

gjmwrych

gjmwrych1#

-m选项可能正是您所需要的:

grep -m 10 PATTERN [FILE]

man grep开始:

-m NUM, --max-count=NUM
        Stop reading a file after NUM matching lines.  If the  input  is
        standard  input  from a regular file, and NUM matching lines are
        output, grep ensures that the standard input  is  positioned  to
        just  after the last matching line before exiting, regardless of
        the presence of trailing context lines.  This enables a  calling
        process  to resume a search.

注意:一旦找到指定数量的匹配项,grep将停止阅读文件!

fxnxkyjh

fxnxkyjh2#

另一个选择是只使用head

grep ...parameters... yourfile | head

这并不需要搜索整个文件--当找到前10个匹配行时,它就会停止。这种方法的另一个优点是,即使您使用带有-o选项的grep,也不会返回超过10行的结果。
例如,如果文件包含以下行:

112233
223344
123123

下面是输出中的差异:

$ grep -o '1.' yourfile | head -n2
11
12

$ grep -m2 -o '1.'
11
12
12

使用head仅返回2个所需结果,而-m2返回3个。

af7jpaap

af7jpaap3#

Awk方法:

awk '/pattern/{print; count++; if (count==10) exit}' file
nwlqm0z1

nwlqm0z14#

适用于2种使用情形:
1.我只想要n个整体结果,而不是每个文件n个结果,grep -m 2是每个文件的最大出现次数。
1.我经常使用git grep,它不接受-m
在这些情况下,一个很好的替代方法是使用grep | sed 2q对所有文件中的前2个匹配项进行grep。sed文档:https://www.gnu.org/software/sed/manual/sed.html

l5tcr1uw

l5tcr1uw5#

Emilyanswer(2020年中期)提到:
我经常使用git grep,它不接受-m
事实上,它确实如此(2022年年中):
在Git 2.38(Q3 2022)中,“git grep -m<max-hits>“(man)是一种限制每个文件显示点击次数的方式。
这意味着当在Git仓库中完成时,git grep -m可以作为grep的替代。
参见Carlos López ( 00xc )commit 68437ed(2022年6月22日)。
(2022年7月13日,由Junio C Hamano -- gitster --合并至commit 8c4f65e
我的天啊!add --max-count命令行选项
签署人:卡洛斯·洛佩斯00xc@protonmail.com
此修补程序添加了一个类似于GNU grep(1)的-m/--max-count的命令行选项,用户可能已经习惯了。
这使得限制输出中显示的匹配数量成为可能,同时保留其他选项(如-C(显示代码上下文)或-p(显示包含函数))的功能,而这在使用shell管道(如head(1))时很难做到。
git grep现在在其手册页中包括:

-m <num>的第一个字符

--max-count <num>的第一个字符

限制每个文件的匹配数量。
使用-v--invert-match选项时,搜索在达到指定的不匹配次数后停止。

  • 值为-1将返回无限制的结果(默认值)。
  • 如果值为0,则会立即退出,并显示非零状态。
h7wcgrx3

h7wcgrx36#

使用尾部:


# dmesg

...
...
...
[132059.017752] cfg80211:   (57240000 KHz - 65880000 KHz @ 2160000 KHz), (N/A, 4000 mBm)
[132116.566238] cfg80211: Calling CRDA to update world regulatory domain
[132116.568939] cfg80211: World regulatory domain updated:
[132116.568942] cfg80211:   (start_freq - end_freq @ bandwidth), (max_antenna_gain, max_eirp)
[132116.568944] cfg80211:   (2402000 KHz - 2472000 KHz @ 40000 KHz), (300 mBi, 2000 mBm)
[132116.568945] cfg80211:   (2457000 KHz - 2482000 KHz @ 40000 KHz), (300 mBi, 2000 mBm)
[132116.568947] cfg80211:   (2474000 KHz - 2494000 KHz @ 20000 KHz), (300 mBi, 2000 mBm)
[132116.568948] cfg80211:   (5170000 KHz - 5250000 KHz @ 40000 KHz), (300 mBi, 2000 mBm)
[132116.568949] cfg80211:   (5735000 KHz - 5835000 KHz @ 40000 KHz), (300 mBi, 2000 mBm)
[132120.288218] cfg80211: Calling CRDA for country: GB
[132120.291143] cfg80211: Regulatory domain changed to country: GB
[132120.291146] cfg80211:   (start_freq - end_freq @ bandwidth), (max_antenna_gain, max_eirp)
[132120.291148] cfg80211:   (2402000 KHz - 2482000 KHz @ 40000 KHz), (N/A, 2000 mBm)
[132120.291150] cfg80211:   (5170000 KHz - 5250000 KHz @ 40000 KHz), (N/A, 2000 mBm)
[132120.291152] cfg80211:   (5250000 KHz - 5330000 KHz @ 40000 KHz), (N/A, 2000 mBm)
[132120.291153] cfg80211:   (5490000 KHz - 5710000 KHz @ 40000 KHz), (N/A, 2700 mBm)
[132120.291155] cfg80211:   (57240000 KHz - 65880000 KHz @ 2160000 KHz), (N/A, 4000 mBm)
alex@ubuntu:~/bugs/navencrypt/dev-tools$ dmesg | grep cfg8021 | head 2
head: cannot open ‘2’ for reading: No such file or directory
alex@ubuntu:~/bugs/navencrypt/dev-tools$ dmesg | grep cfg8021 | tail -2
[132120.291153] cfg80211:   (5490000 KHz - 5710000 KHz @ 40000 KHz), (N/A, 2700 mBm)
[132120.291155] cfg80211:   (57240000 KHz - 65880000 KHz @ 2160000 KHz), (N/A, 4000 mBm)
alex@ubuntu:~/bugs/navencrypt/dev-tools$ dmesg | grep cfg8021 | tail -5
[132120.291148] cfg80211:   (2402000 KHz - 2482000 KHz @ 40000 KHz), (N/A, 2000 mBm)
[132120.291150] cfg80211:   (5170000 KHz - 5250000 KHz @ 40000 KHz), (N/A, 2000 mBm)
[132120.291152] cfg80211:   (5250000 KHz - 5330000 KHz @ 40000 KHz), (N/A, 2000 mBm)
[132120.291153] cfg80211:   (5490000 KHz - 5710000 KHz @ 40000 KHz), (N/A, 2700 mBm)
[132120.291155] cfg80211:   (57240000 KHz - 65880000 KHz @ 2160000 KHz), (N/A, 4000 mBm)
alex@ubuntu:~/bugs/navencrypt/dev-tools$ dmesg | grep cfg8021 | tail -6
[132120.291146] cfg80211:   (start_freq - end_freq @ bandwidth), (max_antenna_gain, max_eirp)
[132120.291148] cfg80211:   (2402000 KHz - 2482000 KHz @ 40000 KHz), (N/A, 2000 mBm)
[132120.291150] cfg80211:   (5170000 KHz - 5250000 KHz @ 40000 KHz), (N/A, 2000 mBm)
[132120.291152] cfg80211:   (5250000 KHz - 5330000 KHz @ 40000 KHz), (N/A, 2000 mBm)
[132120.291153] cfg80211:   (5490000 KHz - 5710000 KHz @ 40000 KHz), (N/A, 2700 mBm)
[132120.291155] cfg80211:   (57240000 KHz - 65880000 KHz @ 2160000 KHz), (N/A, 4000 mBm)
alex@ubuntu:~/bugs/navencrypt/dev-tools$

相关问题