当前位置:首页>Linux>Linux 运维必学(九)|正则表达式全覆盖,零基础也能看懂

Linux 运维必学(九)|正则表达式全覆盖,零基础也能看懂

  • 2026-10-11 05:40:53
Linux 运维必学(九)|正则表达式全覆盖,零基础也能看懂

做Linux运维、日志分析、配置修改,正则表达式 + 文本三剑客 + 文件比对工具是绝对的核心基本功。

很多人命令记不住、写脚本卡壳、日志不会筛选,本质就是这套体系没打通。

今天这篇零基础轻量化干货,按「底层规则 → 检索 → 排版 → 修改 → 分析 → 比对」实战逻辑梳理,只留核心、全是实操、随拿随用。


一、正则表达式:所有文本工具的底层

正则表达式是一套标准化的文本匹配规则,依靠「普通字符+特殊元字符」,实现字符串的匹配、查找、过滤、替换、分割。

Linux 中 grep、sed、awk 全部依赖正则工作,分为两类:

  • 基础正则:grep 默认支持

  • 延伸正则:egrep / sed -r / 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 高频实用参数

  • -n 显示行号

  • -A num 显示匹配行 + 后面N行

  • -B num 显示匹配行 + 前面N行

  • --color=auto 关键字高亮(系统默认开启)


三、延伸正则(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 核心可执行动作

  • 字段打印(最核心):提取文件指定字段、整行内容 

    示例:仅输出系统用户名 

    awk 'BEGIN{FS=":"}{print $1}' /etc/passwd

    小提示:自定义分隔符必须写在 BEGIN 中,才能对首行生效。

  •  条件筛选:按字段数值、行号过滤有效数据 

    示例:筛选第三字段大于100的行

    awk '$3>100 {print $0}' test.txt

  • 简单统计运算:求和、计数,快速做数据汇总 

    示例:累计第三字段数值总和

    awk '{sum+=$3}END{print "数据总和:",sum}' test.txt

  • 首尾预处理动作:运维超高频用法

    BEGIN{}:读取文件前执行,多用于设置分隔符、打印表头

    END{}:文件读取完毕后执行,多用于最终数据汇总。

  • 格式化输出:搭配printf,规整日志、配置输出格式


七、文件比对三剑客:diff / cmp / patch

文件修改、版本迭代、配置同步必备。

7.1 diff(行级文本比对)

原理:寻找最长公共子序列,算出最小改动方案。只把「第一个文件」改成「第二个文件」。

常用参数:忽略空格(-b)、忽略空行(-B)、忽略大小写(-i)

示例:diff test1.txt test2.txt

7.2 cmp(字节级比对)

按字节比对,支持二进制文件,-l 参数可列出所有差异点。

7.3 patch(补丁更新)

根据 diff 差异文件生成补丁,实现多机器批量同步文件更新。


八、终极总结(读者速查|收藏级)

给大家梳理一条完整运维工作流,看完彻底不混淆:

  • 正则:底层规则,所有工具的匹配基础

  • grep/egrep:只查不改,筛选过滤文本

  • printf:文本排版、对齐美化

  • sed:整行批量增删改,改配置首选

  • awk:拆分字段、分析日志、统计数据

  • diff/cmp/patch:对比差异、版本迭代、批量修复

这套组合拳,覆盖 99% 的 Linux 文本处理、日志分析、自动化脚本场景,运维新手一定要吃透!

最新文章

随机文章