linux shell

关注公众号 jb51net

关闭
首页 > 脚本专栏 > linux shell > shell正则表达式操作指令

shell正则表达式智能匹配、grep智慧过滤工具、sed基本用法、sed基本操作指令实例代码

作者:silver90239

正则表达式用来在文件中匹配符合条件的字符串,正则是包含匹配,grep、awk、sed等命令可以支持正则表达式,这篇文章主要介绍了shell正则表达式智能匹配、grep智慧过滤工具、sed基本用法、sed基本操作指令的相关资料,需要的朋友可以参考下

以下是 Shell 中正则表达式、grep 高级过滤、sed 基础与核心操作 的完整技术指南,内容系统、实用,适用于日志分析、文本处理、自动化脚本开发等场景。

一、Shell 正则表达式(Regex)智能匹配

⚠️ 注意:Bash 本身不直接支持完整正则,但可通过 [[ ]]grepsedawk 等工具使用。

1.基本元字符

符号含义示例
.匹配任意单个字符a.c → abc, a2c
*匹配前一个字符 0 次或多次ab*c → ac, abc, abbc
+匹配前一个字符 1 次或多次(需 -Eegrepab+c → abc, abbc(不含 ac)
?匹配前一个字符 0 次或 1 次colou?r → color, colour
^行首锚定^root → 以 root 开头的行
$行尾锚定bash$ → 以 bash 结尾的行
\b单词边界(在 grep -Psed -r 中可用)\bword\b → 精确匹配单词

2.字符集合与范围

表达式含义
[abc]匹配 a、b 或 c
[a-z]匹配任意小写字母
[^0-9]匹配非数字字符
[[:digit:]]等价于 [0-9](POSIX 标准)
[[:alpha:]]字母(大小写)
[[:alnum:]]字母 + 数字
[[:space:]]空白字符(空格、制表符等)

3.分组与引用(扩展正则)

表达式含义
(abc)分组,可配合 `
`a(bc)d`
\1, \2反向引用(在 sed 中常用)

启用扩展正则

  • grep -Eegrep
  • sed -r(GNU sed)或 sed -E(macOS)

二、grep智慧过滤工具(文本搜索之王)

1.基础语法

grep [选项] '模式' 文件

2.常用选项

选项作用示例
-i忽略大小写grep -i "error" log.txt
-v反向匹配(显示不匹配的行)grep -v "^#" config.conf(过滤注释)
-n显示行号grep -n "fail" syslog
-r / -R递归搜索目录grep -r "password" /etc/
-l仅显示匹配文件名grep -l "TODO" *.sh
-A N显示匹配行及后 N 行grep -A 2 "ERROR" app.log
-B N显示匹配行及前 N 行grep -B 1 "Exception" app.log
-C N显示上下文 N 行grep -C 1 "timeout" app.log
-E使用扩展正则(推荐)`grep -E "error
-o仅输出匹配部分grep -o "[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}" access.log(提取 IP)

3.智慧过滤实战示例

✅ 提取所有 IPv4 地址

grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" access.log 

✅ 过滤有效日志(排除空行和注释)

grep -vE "^\s*$|^#" nginx.conf 

✅ 统计错误次数

grep -i "error" app.log | wc -l 

✅ 查找包含多个关键词的行

grep -E "login.*failed|authentication error" auth.log 

三、sed基本用法与核心操作指令

sed = Stream Editor,逐行处理文本流,常用于替换、删除、插入、提取

1.基本语法

sed [选项] '命令' 文件
# 或
cat file | sed '命令'

2.常用选项

选项作用
-n抑制默认输出(配合 p 打印)
-i直接修改原文件(慎用!建议先备份)
-e多命令(如 sed -e 's/a/b/' -e 's/c/d/'
-r / -E启用扩展正则(GNU sed 用 -r,macOS 用 -E

3. 四大核心操作指令

(1) 替换(s///)——最常用!

# 基本格式:s/旧/新/[标志]
sed 's/foo/bar/' file        # 替换每行第一个 foo
sed 's/foo/bar/g' file       # 全局替换(g = global)
sed 's/foo/bar/2g' file      # 从第2个开始全局替换
sed -i 's/old/new/g' file    # 直接修改文件

✅ 特殊符号

(2) 删除(d)

sed '2d' file          # 删除第2行
sed '1,5d' file        # 删除1-5行
sed '/error/d' file    # 删除包含 error 的行
sed '/^$/d' file       # 删除空行

(3) 打印(p)——配合 -n 使用

sed -n '2p' file       # 仅打印第2行
sed -n '/success/p' file  # 打印含 success 的行

(4) 追加/插入(a/i)

sed '2a\NEW LINE' file     # 在第2行后追加
sed '2i\NEW LINE' file     # 在第2行前插入

4. sed 实战示例

✅ 批量替换配置项

sed -i 's/^#Port 22/Port 2222/' /etc/ssh/sshd_config

✅ 提取特定字段(类似 cut)

# 提取 /etc/passwd 中用户名(第一列)
sed 's/:.*//' /etc/passwd

✅ 删除 HTML 标签

sed 's/<[^>]*>//g' webpage.html

✅ 格式化日期(YYYY-MM-DD → DD/MM/YYYY)

echo "2025-12-18" | sed 's/\([0-9]\{4\}\)-\([0-9]\{2\}\)-\([0-9]\{2\}\)/\3\/\2\/\1/'
# 输出:18/12/2025

四、组合使用:grep + sed 强大联动

# 从日志中提取错误IP并去重
grep "Failed password" /var/log/auth.log | \
  grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" | \
  sort | uniq -c | sort -nr
# 修改所有 .sh 文件中的解释器路径
sed -i '1s|^#!/bin/sh$|#!/bin/bash|' *.sh

关键总结表

工具核心用途推荐用法
正则模式匹配基础用 -E 启用扩展正则
grep查找匹配行grep -E -v -n -r 组合使用
sed编辑文本流s///g 替换、d 删除、-i 谨慎使用

💡 黄金法则

  • grep 用于“找”sed 用于“改”
  • 先用 grep 筛选,再用 sed 处理;
  • 修改文件前务必 备份 或先 不加 -i 预览!

到此这篇关于shell正则表达式智能匹配、grep智慧过滤工具、sed基本用法、sed基本操作指令的文章就介绍到这了,更多相关shell正则表达式操作指令内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文