Skip to main content

Linux 核心命令

文件查看编辑命令 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/ /'