Linux中sed命令详解
sed(Stream Editor)是Linux中强大的流式文本编辑器,用于对输入流(文件或管道数据)执行文本转换。其核心特点是逐行处理,支持正则表达式,适用于批量编辑、过滤和替换文本。以下分类解析常见用法:
1. 文本替换(核心功能)
语法:sed 's/原字符串/新字符串/标志' 文件名
- 基本替换:
# 将每行首个"apple"替换为"orange"(默认仅替换每行第一个匹配) sed 's/apple/orange/' fruits.txt - 全局替换:添加
g标志# 替换行内所有"apple" sed 's/apple/orange/g' fruits.txt - 限制行范围:
# 仅在第2~4行替换 sed '2,4s/apple/orange/g' fruits.txt
2. 删除行
语法:sed '地址范围d' 文件名
- 删除特定行:
# 删除第3行 sed '3d' data.txt - 按模式删除:
# 删除包含"error"的行 sed '/error/d' log.txt - 删除空行:
sed '/^$/d' file.txt # ^$ 匹配空行
3. 插入与追加文本
- 在行前插入(
i命令):# 在第2行前插入"New Line" sed '2i New Line' text.txt - 在行后追加(
a命令):# 在包含"end"的行后追加"---EOF---" sed '/end/a ---EOF---' document.txt
4. 行号定位与多命令组合
- 行号范围操作:
# 仅打印第5~10行(-n抑制默认输出,p打印) sed -n '5,10p' longfile.txt - 多命令执行(用
-e或分号分隔):# 先替换"cat"为"dog",再删除空行 sed -e 's/cat/dog/g' -e '/^$/d' pets.txt
5. 直接修改文件(谨慎使用)
-i选项:原地编辑文件(备份原文件更安全)# 替换并备份原文件为.bak sed -i.bak 's/old/new/g' original.txt
6. 高级技巧
- 引用匹配内容:用
&引用匹配的整个字符串# 将所有数字用括号包裹:123 → (123) sed 's/[0-9]\+/(&)/g' numbers.txt - 分组替换:用
\( \)捕获组,\1引用# 交换"John,Doe"为"Doe, John" sed 's/\([^,]*\),\(.*\)/\2, \1/' names.txt
注意事项
- 默认行为:
sed输出到终端,不修改原文件(除非用-i)。 - 正则兼容:支持基本正则(BRE),扩展正则需加
-E(如sed -E 's/pat1|pat2/repl/g')。 - 特殊字符转义:如替换路径
/path/to/dir时,需转义斜杠:s/\/old\/path/\/new\/path/或改用其他分隔符(如|)。
示例综合应用:
删除config.txt中注释行(以#开头),并将debug=false改为debug=true:sed -e '/^#/d' -e 's/debug=false/debug=true/g' config.txt
3万+

被折叠的 条评论
为什么被折叠?



