我想说 grep 最多 10 行。
我不想让我的电脑工作太辛苦。我希望它在 grep 找到 10 个结果后停止。可以吗?
-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 就会停止读取文件!
另一种选择是仅使用 head:
grep ...parameters... yourfile | head
这不需要搜索整个文件 - 当找到前十个匹配行时它将停止。这种方法的另一个优点是,即使您使用带有 -o 选项的 grep,也将返回不超过 10 行。
例如,如果文件包含以下行:
112233
223344
123123
那么这就是输出的差异:
$ grep -o '1.'你的文件 |头-n2 11 12 $ grep -m2 -o '1.' 11 12 12
使用
head
仅根据需要返回 2 个结果,而 -m2 返回 3。
awk 方法:
awk '/pattern/{print; count++; if (count==10) exit}' file
对于 2 个用例:
grep -m 2
是每个文件的最大出现次数。 git grep
,不需要-m
在这些情况下,一个很好的替代方案是
grep | sed 2q
grep 所有文件中出现的前 2 个匹配项。 sed 文档:https://www.gnu.org/software/sed/manual/sed.html
我经常使用
,但不需要git grep
。-m
事实上,确实如此(2022 年中):
在 Git 2.38(2022 年第 3 季度)中,“
git grep -m<max-hits>
”(man) 是限制每个文件显示的点击次数的一种方法。
这意味着在 Git 存储库中完成时,
git grep -m
可以用作 grep
的替代品。
请参阅commit 68437ed(2022 年 6 月 22 日),作者:Carlos López (
00xc
)。gitster
-- 合并于 commit 8c4f65e,2022 年 7 月 13 日)
:添加 --max-count 命令行选项grep
签署人:Carlos López [电子邮件受保护]
此补丁添加了一个类似于 GNU grep(1) 的
/-m
的命令行选项,用户可能已经习惯了。--max-count
这使得可以限制输出中显示的匹配数量,同时保留其他选项的功能,例如
(显示代码上下文)或-C
(显示包含函数),这对于使用shell 管道(例如-p
)。head(1)
git grep
现在包含在其 手册页中:
-m <num>
--max-count <num>
限制每个文件的匹配数量。
使用
或-v
选项,指定后停止搜索 不匹配的数量。--invert-match
- 值为 -1 将返回无限制 结果(默认)。
- 值为 0 将立即退出 非零状态。
使用尾巴:
#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$
--max-count 选项似乎不适用于标准输入
LC_CTYPE=C tr -dc '[:graph:]' < /dev/urandom |head -c 22200 | grep --max-count=1 -o -E '[A-HJ-NP-Za-km-z/\()$?@]{12}'
PuvkrKgCsko
斯洛姆普雷吉耶
icCqWyxCA$Dp
RzyCNBbiF/ZG
iBMvXNQ\YX\
vGRtHuj(fmdm
zqwEXuy)RNCo
g)@cwFoMLFZU
NzkUa?pexC/F
yisv(y$kkXGE
水根/JDfU
h(ugUsnGTsYp
HzQfpYWk?oPx
它应该只打印一个匹配的模式(生成的密码),但它会显示更多。如果我删除头部 -c 22000,它会永远循环......
我只需要从 urandom 中找到与特定密码规则模式匹配的字符串。我做错了什么?