文件查看编辑命令 sed
sed 是 Stream Editor(流编辑器) 的缩写,它是 Linux 中非常强大的文本处理工具。sed 会一行一行地读取文件或标准输入,对匹配到的内容进行替换、删除、插入等操作,然后将结果输出到标准输出(默认不会修改原文件)。
1. sed 基本语法
sed [选项] '编辑命令' 文件
常用选项:
-n
:只输出经过处理的行(默认会输出所有行)-e
:执行多条sed
编辑命令-i
:直接修改原文件(慎用)-r
:支持扩展正则表达式(有些系统是-E
)
2. 替换文本(s 命令)
s/旧文本/新文本/
是 sed 中最常用的命令。
# 将第一个匹配到的 old 替换为 new
sed 's/old/new/' file.txt
# 替换行中所有匹配到的 old
sed 's/old/new/g' file.txt
# 替换时忽略大小写
sed 's/old/new/gi' file.txt
# 使用不同的分隔符(适合路径)
sed 's#/usr/bin#/opt/bin#g' file.txt
3. 直接修改文件内容(-i)
# 直接修改文件,将 old 全部替换为 new
sed -i 's/old/new/g' file.txt
# 修改前先备份原文件
sed -i.bak 's/old/new/g' file.txt
4. 删除行(d 命令)
# 删除第 2 行
sed '2d' file.txt
# 删除第 2 到 5 行
sed '2,5d' file.txt
# 删除匹配关键字的行
sed '/error/d' file.txt
5. 打印行(p 命令)
配合 -n
选项使用:
# 打印第 3 行
sed -n '3p' file.txt
# 打印第 5 到 8 行
sed -n '5,8p' file.txt
# 打印包含关键字的行
sed -n '/hello/p' file.txt
6. 插入和追加文本(i 和 a 命令)
# 在第 2 行前插入一行
sed '2i\插入的内容' file.txt
# 在第 2 行后追加一行
sed '2a\追加的内容' file.txt
7. 修改指定行内容(c 命令)
# 将第 3 行替换为新内容
sed '3c\这是新的第3行内容' file.txt
# 将包含 hello 的行替换为新内容
sed '/hello/c\替换后的内容' file.txt
8. 读取外部文件(r 命令)
# 在第 3 行后读取 other.txt 内容
sed '3r other.txt' file.txt
9. 删除行首或行尾的空格
# 删除行首空格
sed 's/^[ \t]*//' file.txt
# 删除行尾空格
sed 's/[ \t]*$//' file.txt
10. 多个命令一起执行
# 用 -e 运行多条命令
sed -e 's/foo/bar/g' -e 's/hello/world/g' file.txt
# 在一个脚本块中执行多条命令
sed '
s/foo/bar/g
s/hello/world/g
' file.txt
11. 使用地址范围进行编辑
# 仅修改第 2 到 4 行
sed '2,4s/foo/bar/g' file.txt
# 从匹配 pattern1 到匹配 pattern2 的行替换
sed '/pattern1/,/pattern2/s/foo/bar/g' file.txt
12. 高级用法
# 交换相邻两行
sed 'N;s/\(.*\)\n\(.*\)/\2\n\1/' file.txt
# 删除连续空行,只保留一个
sed '/^$/N;/^\n$/D' file.txt
# 显示行号
sed = file.txt | sed 'N;s/\n/ /'