做Linux运维、日志分析、配置修改,正则表达式 + 文本三剑客 + 文件比对工具是绝对的核心基本功。
很多人命令记不住、写脚本卡壳、日志不会筛选,本质就是这套体系没打通。
今天这篇零基础轻量化干货,按「底层规则 → 检索 → 排版 → 修改 → 分析 → 比对」实战逻辑梳理,只留核心、全是实操、随拿随用。
一、正则表达式:所有文本工具的底层
正则表达式是一套标准化的文本匹配规则,依靠「普通字符+特殊元字符」,实现字符串的匹配、查找、过滤、替换、分割。
Linux 中 grep、sed、awk 全部依赖正则工作,分为两类:
必避坑:语系编码影响匹配结果
正则对字母、数字、空白的识别,依赖系统LANG 编码,编码混乱会导致匹配结果错乱。统一英文编码可彻底解决。
Linux 通用标准字符集(无脑记住):
[:alnum:] 大小写字母+数字
[:alpha:] 纯英文字母
[:digit:] 纯数字
[:lower:] 小写字母
[:upper:] 大写字母
[:blank:] 空格、Tab
[:space:] 所有空白字符(含换行)
[:punct:] 所有标点符号
[:xdigit:] 十六进制字符
[:cntrl:] 系统控制字符
二、基础正则元字符(grep 日常必备)
以下是运维使用率100%的元字符,搭配真实案例,直接复制可用。
^word 匹配行首 示例:grep -n '^#' test.txt 筛选所有注释行
word$ 匹配行尾 示例:grep -n '!$' test.txt 筛选以 ! 结尾的行
. 匹配任意单个字符(不能为空) 示例:grep -n 'e.e' test.txt
\ 转义符,取消特殊符号的正则功能 示例:匹配单引号 grep -n \' test.txt
* 前一个字符 0次/无数次 示例:grep -n 'ess*' test.txt 匹配es、ess、esss
.* 万能匹配:任意所有字符
[list] 匹配括号内任意单个字符 示例:grep -n 'g[ld]' test.txt 匹配gl、gd
[n1-n2] 匹配连续范围 示例:grep -n '[A-Z]' test.txt 匹配大写字母
[^list] 反向匹配(排除字符) 示例:grep -n 'oo[^t]' test.txt
{n,m} 限定连续次数 示例:grep -n 'go\{2,3\}g' test.txt 匹配2~3个o
grep 高频实用参数
三、延伸正则(egrep 高阶简化)
基础正则写法繁琐,egrep 延伸正则支持更人性化的符号,适合复杂多条件匹配。
+ 前一个字符 1次及以上 egrep -n 'go+d' test.txt
? 前一个字符 0次或1次 egrep -n 'go?d' test.txt
| 或逻辑,多条件匹配 egrep -n 'gd|good|dog' test.txt
() 字符分组,简化重复规则 egrep -n 'g(la|oo)d' test.txt
()+ 分组内容重复多次匹配 echo 'AxyzxyzC'|egrep 'A(xyz)+C'
四、printf:文本格式化排版神器
echo 只能简单输出,printf 可以对齐、固定宽度、规整日志输出,是 awk 最佳搭档。
4.1 常用占位符
%s 字符串、%d 整数、%f 浮点数
%-10s 左对齐、固定10字符宽度
%10s 右对齐、固定10字符宽度
4.2 实操案例
基础规整输出:
printf "%-15s %d\n" "root" 0
搭配 awk 规整系统用户数据(运维高频):
awk -F: '{printf "%-12s %-6s\n",$1,$3}' /etc/passwd
五、sed 工具:行级批量改文件
核心定位:sed 是 Linux 行级流式编辑工具,无需打开文件,可直接批量对文件进行增/删/改/替换,配合正则可自动化清理日志、修改配置,是运维必备批量改文件神器。
5.1 sed 标准语法(新手直接套用)
① 命令行即时执行(日常99%场景)
sed [参数] '范围/规则+动作' 文件名
② 脚本执行(复杂批量任务)
sed -f 脚本名.sh 目标文件
⚠️ 硬性规范:所有 sed 动作必须用 单引号 包裹,避免解析异常。
5.2 高频参数(带实操案例)
-n 安静模式:只输出被处理的行,不输出全部内容
✅ 案例:仅打印 5–10 行
sed -n '5,10p' test.txt
-e 多指令并行:一条命令执行多个操作
案例:清空行 + 替换关键字
sed -e '/^$/d' -e 's/test/demo/g' test.txt
-r 启用延伸正则:直接支持 |、+、(),无需转义
✅ 案例:删除含 test 或 demo 的行
sed -r '/test|demo/d' test.txt
-i 直接改原文件(无备份,谨慎使用)
✅ 案例:全局替换内容
sed -i 's/old/new/g' test.txt
-i.bak 安全修改(强烈推荐):改文件同时生成 .bak 备份,支持回滚 ✅ 案例:修改端口并自动备份
sed -i.bak 's/80/8080/g' nginx.conf
5.3 六大核心动作(语法+可直接复制案例)
a 行后新增|指定行下方加内容
sed '3a max_file_size=1024' test.txt
i 行前插入|指定行上方加内容
sed '1i # 配置文件已自动更新' test.txt
d 删除行|删空行、注释、指定行数
清空行:sed '/^$/d' test.txt
删1-5行:sed '1,5d' test.txt
c 整行替换|覆盖重写整行内容
sed '10c port=8088' test.txt
s///g 全局替换|最常用!
无 g 只替换首个匹配
取消所有注释:sed 's/^#//g' test.txt
p 精准打印|搭配 -n 筛选输出
输出含 error 的行:sed -n '/error/p' test.txt
💡 运维小技巧:sed 所有行范围都可搭配正则,比如 /^#/d 一键清理配置文件所有注释行,极简高效。
六、awk 工具:字段级数据解析、日志分析
sed 管整行,awk 管字段。
只要是分割、提取、筛选、统计、格式化输出的场景,一律用 awk,是日志分析最强工具。
6.1 运行格式
awk '条件{动作}' 文件
6.2 核心内置变量
$0 整行内容
$1/$2... 第N个字段
NR 当前行号
NF 当前行字段总数
FS 自定义分隔符
6.3 逻辑判断
支持:>、<、>=、<=、==、!=
6.4 核心可执行动作
七、文件比对三剑客:diff / cmp / patch
文件修改、版本迭代、配置同步必备。
7.1 diff(行级文本比对)
原理:寻找最长公共子序列,算出最小改动方案。只把「第一个文件」改成「第二个文件」。
常用参数:忽略空格(-b)、忽略空行(-B)、忽略大小写(-i)
示例:diff test1.txt test2.txt
7.2 cmp(字节级比对)
按字节比对,支持二进制文件,-l 参数可列出所有差异点。
7.3 patch(补丁更新)
根据 diff 差异文件生成补丁,实现多机器批量同步文件更新。
八、终极总结(读者速查|收藏级)
给大家梳理一条完整运维工作流,看完彻底不混淆:
这套组合拳,覆盖 99% 的 Linux 文本处理、日志分析、自动化脚本场景,运维新手一定要吃透!