您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# Linux生产环境上最常用的Sed技巧有哪些
## 一、Sed基础概念与核心优势
### 1.1 什么是Sed
Sed(Stream Editor)是Unix/Linux系统中经典的流式文本编辑器,它以行为单位对文本进行处理,执行包括查找、替换、删除、插入等操作。与交互式编辑器不同,Sed通过脚本指令批量处理文本流,特别适合自动化场景。
### 1.2 生产环境中的核心价值
- **非交互式处理**:无需人工干预即可完成批量文本修改
- **管道协作能力**:完美融入Shell管道与其他命令协作
- **极高性能**:处理GB级日志文件时效率远超人工操作
- **原子化操作**:保证脚本执行的一致性
## 二、Sed基础语法结构
### 2.1 基本命令格式
```bash
sed [选项] '地址范围/操作/参数' 文件名
选项 | 作用描述 |
---|---|
-n | 禁止默认输出 |
-i | 直接修改文件内容 |
-e | 执行多条sed命令 |
-r | 启用扩展正则表达式 |
# 替换每行第一个匹配项
sed 's/old/new/' file.log
# 全局替换(所有匹配项)
sed 's/old/new/g' access.log
# 使用#作为分隔符处理URL替换
sed 's#http://#https://#g' nginx.conf
# 保留匹配部分内容(&符号引用)
sed 's/[0-9]\{3\}/[&]/g' data.txt
# 处理第5行内容
sed '5s/error/warning/' app.log
# 范围处理(10-20行)
sed '10,20d' largefile.txt
# 处理包含ERROR的行
sed '/ERROR/s/$/ [Critical]/' system.log
# 从匹配"START"到匹配"END"之间的行
sed '/START/,/END/d' config.ini
# 多条命令顺序执行
sed -e 's/foo/bar/' -e '/baz/d' file
# 使用分组重组日期格式
sed -r 's/([0-9]{4})-([0-9]{2})-([0-9]{2})/\3.\2.\1/' dates.txt
# Shell变量传递到sed
new_str="REPLACED"
sed "s/OLD/$new_str/g" template.txt
# 手机号脱敏处理
sed -r 's/(1[0-9]{2})[0-9]{4}([0-9]{4})/\1****\2/g' userdata.log
# Apache日志时间格式转换
sed -r 's/\[([0-9]{2})\/([a-zA-Z]{3})\/([0-9]{4})/\3-\2-\1/' access_log
# 修改所有JDBC连接参数
sed -i '/jdbc.url/s/old_host/new_host/g' *.properties
# 注释掉所有包含DEBUG的行
sed -i '/DEBUG/s/^/#/' log4j.properties
# 取消特定配置的注释
sed -i '/^#ServerName/s/^#//' httpd.conf
# 交换第2列和第3列
sed -r 's/([^,]*),([^,]*),([^,]*)/\1,\3,\2/' data.csv
# 删除行首行尾空格
sed 's/^[ \t]*//;s/[ \t]*$//' rawdata.txt
sed -u 's/pattern/replace/g' hugefile.log
# 仅处理文件前10000行
sed '1,10000s/old/new/' massivedata.txt
# 非贪婪匹配示例
sed 's/<[^>]*>//g' html.txt
# 使用分组提高效率
sed -r 's/(word1|word2|word3)/REPL/g' document.txt
# 自动创建备份文件
sed -i.bak 's/pattern/replace/' critical.conf
# 检查文件权限后再操作
[ -w target.file ] && sed -i 's/old/new/' target.file
# 三步验证法
sed 's/pattern/replace/' file > preview
diff file preview
# 确认无误后执行实际修改
# 先用awk过滤再用sed处理
awk '/ERROR/{print $2}' logfile | sed 's/://g'
# 批量处理项目文件
find . -name "*.java" -exec sed -i 's/旧包名/新包名/g' {} +
#!/bin/bash
# 自动版本号替换
new_version="2.1.0"
sed -i "s/^version=.*/version=$new_version/" build.gradle
# 显示执行过程
sed --debug 's/pattern/replace/' file
/
、&
等特殊字符需用\
转义[^...]
构造非贪婪匹配\r\n
问题# 多行内容合并处理
sed -n '1h;2,3H;${g;s/\n/ /gp}' multiline.txt
# 条件处理示例
sed '{/error/b errhandler; d; :errhandler s/.*/[ERR] &/}' logfile
操作类型 | 10MB文件 | 100MB文件 | 1GB文件 |
---|---|---|---|
简单替换 | 0.12s | 1.3s | 14s |
复杂正则替换 | 0.35s | 3.8s | 42s |
多命令组合处理 | 0.28s | 2.9s | 31s |
-n
和p
命令测试time
命令测量执行时间生产环境黄金法则:任何直接修改文件的sed命令,都必须先在不带
-i
参数的情况下验证输出结果! “`
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。