sed命令简介
sed(Stream Editor)是一个强大的流编辑器,用于对文本进行替换、删除、插入、打印等操作。它是Linux/Unix系统中非常重要的文本处理工具之一。
经典sed命令示例
1. 文本替换
最基本的用法是替换文本内容:
# 替换每行中第一次出现的"old"为"new"
sed 's/old/new/' file.txt
# 全局替换,将所有"old"替换为"new"
sed 's/old/new/g' file.txt
# 替换第3行中的"old"为"new"
sed '3s/old/new/' file.txt
# 使用不同的分隔符(避免路径中的斜杠冲突)
sed 's#old/path#new/path#g' file.txt
2. 删除行
sed可以删除匹配特定模式的行:
# 删除包含"pattern"的行
sed '/pattern/d' file.txt
# 删除第2行
sed '2d' file.txt
# 删除第2行到最后一行
sed '2,$d' file.txt
# 删除最后一行
sed '$d' file.txt
# 删除空行
sed '/^$/d' file.txt
3. 插入和追加文本
# 在第2行前插入文本
sed '2i\New line inserted' file.txt
# 在文件末尾追加文本
sed '$a\Appended line' file.txt
# 在匹配行前插入文本
sed '/pattern/i\Inserted before pattern' file.txt
# 在匹配行后追加文本
sed '/pattern/a\Appended after pattern' file.txt
4. 打印特定内容
# 打印第10行
sed -n '10p' file.txt
# 打印包含"pattern"的行
sed -n '/pattern/p' file.txt
# 打印第5行到包含"test"的行之间的内容
sed -n '5,/^test/p' file.txt
# 打印文件行号
sed '=' file.txt
5. 文件范围操作
# 对第2行到第5行执行替换操作
sed '2,5s/old/new/g' file.txt
# 对包含"start"到包含"end"之间的行执行替换
sed '/start/,/end/s/old/new/g' file.txt
6. 使用正则表达式
# 替换以数字开头的行
sed 's/^[0-9].*/Number line/' file.txt
# 将所有单词转为大写(GNU sed)
sed 's/[a-z]/\U&/g' file.txt
# 删除行首的空白字符
sed 's/^[ \t]*//' file.txt
7. 保存修改到文件
# 直接修改原文件(谨慎使用)
sed -i 's/old/new/g' file.txt
# 将匹配的内容保存到另一个文件
sed -n '/pattern/w matched.txt' file.txt
8. 复杂示例
# 在每一行末尾添加内容
sed 's/$/ [appended]/' file.txt
# 在每一行前面添加行号
sed '=' file.txt | sed 'N;s/\n/: /'
# 将多个空行替换为单个空行
sed '/^$/N;/\n$/D' file.txt
# 交换每两行的位置
sed 'N;s/\(.*\)\n\(.*\)/\2\n\1/' file.txt
总结
sed命令是Linux/Unix系统中不可或缺的文本处理工具,掌握其基本用法可以大大提高文本处理的效率。以上示例涵盖了sed的大部分常用功能,通过组合使用这些命令,可以完成复杂的文本处理任务。