首页 Linux

运维人的宝藏命令:fgrep,简单粗暴但好用到哭

2026-04-27 18:06 公众号·运维不迷茫

不管搜什么,一搜就用grep,一搜就用正则,遇到 .*[] 还要疯狂转义,大文件一卡半天,搜个固定字符串却绕了大弯。

今天聊一个被严重低估的命令:fgrep。它不是小众玩具,而是 grep 家族里最快、最稳、最省心的那一个 ,专门用来搜固定字符。学会它你又多掌握一个命令,多学个命令就多一种方法。

一、fgrep含义

fgrep=fixed-string grep(固定字符串匹配)等价于grep -F。它和普通grep 最核心的区别只有一句:fgrep不解析任何正则,所有字符都按原文匹配。

你搜 .它就真的搜 .;你搜 *,它就真的搜 *;你搜 [a-z],它就真的搜 [a-z]不用转义、不用顾虑、不会误匹配。

二、fgrep比grep优势

1.超快:大文件多关键词,速度明显更快

fgrep 使用专门的多模式匹配算法(Aho-Corasick),不跑正则引擎、不做回溯,在大日志、大文本里搜固定串,速度经常比普通grep加正则转义快很多。你搜 10 个关键词,100 万行日志:grep 要一条条正则判断,而fgrep 直接明文匹配。

2.超稳:特殊字符不用转义

这是 fgrep 日常最实用的点。下面以搜ip:192.168.1.1为例子来进行演示

grep直接搜索地址

grep "192.168.2.104" 123.txt

grep默认=grep -G = BRE(基础正则),“.” 在 BRE里=元字符 = 匹配任意一个字符,所以直接搜索ip地址可能会出现错误,需要进行转义。

grep "192\.168\.2\.104" 123.txt

用fgrep:

fgrep "192.168.2.104" 123.txt

3.超准:只匹配你写的,不会意外命中

grep一不小心就因为 .* 匹配到不该匹配的内容。fgrep完全不存在:写什么,搜什么,匹配什么。

三、常用的6种fgrep用法

1.基础搜索

fgrep "root=/dev/mapper/centos-root"  messages-20260416

对于路径这种使用grep需要转义的搜索,使用fgrep命令能够快速搜索出结果。

fgrep  "" messages-20260416

2.忽略大小写

fgrep -i "root_image=/vmlinuz-3.10.0-957.el7.x86_64" messages-20260416

3.只输出匹配行号

fgrep -n "BOOT_IMAGE=/vmlinuz-3.10.0-957.el7.x86_64" messages-20260416

4.反向匹配

fgrep -v error messages-20260416

搜索文件里不包含error的行。

5.只匹配整个单词

fgrep -w "root" /etc/passwd

搜索文件里root的整单词。

6.从文件读取关键词

把要搜的串一行一个放keys.txt

error

warn

timeout

connection  refused

批量搜索:

fgrep -f keys.txt app.log

四、什么时候必须用fgrep?

fgrep整体比较简单,如果遇到满足下面任意一条,建议优先用 fgrep:

你要搜的是固定字符串(ip、路径、错误信息、日志关键词),不想转义,写正则;

文本里包含 . * + ? [ ] ( ) | 等正则敏感符号;文件很大、行数很多(提速明显);

一句话:搜明文=fgrep;搜规则 = grep -E

五、别混淆:一张图分清 grep/egrep/fgrep

 六、总结

1. 别再把fgrep当成弱鸡命令

很多人以为 fgrep 功能少、只能简单搜词,其实它支持绝大多数常用参数:

-i 忽略大小写

-v 反选

-n 显示行号

-c 统计行数

-l 只显示文件名

-f 批量匹配。

参数用法跟 grep 几乎完全一样,只是关闭了正则解析,搜索更纯粹、更快。

2.一个小提醒:fgrep不支持正则

如果你需要:

匹配多个关键词:error|warn|fail匹配数字范围:[0-9]+\.[0-9]+模糊规则:^root|^docker使用grep -E 或egrep例如:grep -E 'error|warn'

fgrep 做不到,也不应该去做—— 术业有专攻。其实日常运维50%的场景,其实都是在搜固定字符串,fgrep 才是那个被低估、但最实用的神器。

七、命令记忆总结

fgrep = 搜明文、不玩正则;优点:快、稳、不用转义;最佳场景:IP、路径、日志关键词、批量关键词和正则敏感的字符。记忆口诀:搜规则用 grep -E,搜明文用 fgrep(grep -F)在大多数现代Linux发行版中,fgrep是grep -F的别名或等效命令。两者可互换使用,但了解其含义能帮你做出最佳选择。

下次搜日志、查配置、过滤文本,别再硬写转义了。试试 fgrep,你会回来感谢这一行命令。

返回首页
返回顶部