Linux sed 命令不完全指南

2 min read

Linux Sed 命令不完全指南
1. sed 简介
1.1 什么是 Sed?
sed (Stream Editor) 是 Linux 和 Unix 系统中一个强大的文本处理工具,主要用于对文本进行自动编辑、替换、删除、插入等操作。它可以处理标准输入、文件或管道传输的文本流。
1.2 sed 的基本工作原理
sed 通过逐行读取输入文本,根据预定义的规则进行处理,然后输出结果。其核心是一种模式-动作(pattern-action)处理模型。
2. sed 基本语法
2.1 基本命令格式
sed [options] 'command' input_file
2.2 常用选项
-n
:静默模式,只输出匹配的行-i
:直接修改源文件-e
:指定多个编辑命令-f
:从文件读取 sed 脚本
3. sed 基本命令详解
3.1 替换命令 (s)
# 基本替换
sed 's/old/new/' file.txt
# 全局替换(所有匹配项)
sed 's/old/new/g' file.txt
# 替换第n个匹配项
sed 's/old/new/2' file.txt
# 区分大小写替换
sed 's/old/new/gi' file.txt
3.2 插入命令 (i)
# 在第2行前插入文本
sed '2i\New Line' file.txt
# 在匹配模式前插入
sed '/pattern/i\Inserted Line' file.txt
3.3 追加命令 (a)
# 在第2行后追加文本
sed '2a\Appended Line' file.txt
# 在匹配模式后追加
sed '/pattern/a\Appended Line' file.txt
3.4 删除命令 (d)
# 删除特定行
sed '3d' file.txt
# 删除匹配模式的行
sed '/pattern/d' file.txt
# 删除空行
sed '/^$/d' file.txt
3.5 打印命令 (p)
# 打印指定行
sed -n '5p' file.txt
# 打印匹配模式的行
sed -n '/pattern/p' file.txt
3.6 替换详细说明
直接修改文件(-i 选项)
# 直接修改源文件(实际改变文件内容)
sed -i 's/old/new/g' file.txt
仅显示替换结果(不修改源文件)
# 只输出替换结果,不改变源文件
sed 's/old/new/g' file.txt
# 保存到新文件
sed 's/old/new/g' file.txt > new_file.txt
替换演示
# 原文件:test.txt
# 内容:Hello world
# 执行 sed 's/world/linux/' test.txt
# 不带 -i:只会输出 "Hello linux",原文件不变
# 带 -i:原文件内容变为 "Hello linux"
重要注意事项
- 不带
-i
的sed
命令默认只输出结果 -i
选项会直接修改源文件- 建议使用
-i.bak
创建备份文件# 创建备份文件 sed -i.bak 's/old/new/g' file.txt # 生成 file.txt 和 file.txt.bak
4. 行选择与过滤
4.1 选择特定行
# 显示第1-5行
sed -n '1,5p' file.txt
# 显示所有包含模式的行
sed -n '/pattern/p' file.txt
4.2 复杂行选择
# 从第10行到最后
sed -n '10,$p' file.txt
# 选择奇数行
sed -n '1~2p' file.txt
5. 正则表达式
5.1 基础正则匹配
# 匹配以数字开头的行
sed -n '/^[0-9]/p' file.txt
# 匹配电子邮件
sed -n '/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/p' file.txt
5.2 高级正则替换
# 捕获组替换
sed 's/\([0-9]\+\)x\([0-9]\+\)/\2*\1/' file.txt
6. 高级 sed 脚本
6.1 多命令处理
sed -e '1d' -e 's/old/new/g' file.txt
6.2 使用 sed 脚本文件
# script.sed
1d
s/old/new/g
# 使用脚本
sed -f script.sed file.txt
7. 实战案例
7.1 日志处理
# 提取时间戳
cat access.log | sed -n 's/.*\[\(.*\)\].*/\1/p'
# 过滤错误日志
sed -n '/ERROR/p' application.log
7.2 批量文件处理
# 批量替换多个文件
find . -type f -name "*.txt" -exec sed -i 's/old/new/g' {} \;
8. 性能与注意事项
- 对大文件使用
-i
选项时要谨慎 - 复杂替换优先考虑使用 awk 或 perl
- 使用
\(\)
进行分组与引用 - 正则表达式要转义特殊字符
9. 常见陷阱与解决方案
- 转义特殊字符
- 使用不同分隔符
- 处理包含斜杠的文本
结语
sed 是文本处理的瑞士军刀,掌握它需要大量实践和对正则表达式的深入理解。
0
Subscribe to my newsletter
Read articles from scopor directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
