4.1 sed命令详解及示例

sed(Stream Editor)是 Linux/Unix 下的流式文本编辑器,主要用于对文本进行查找、替换、删除、插入等操作,支持正则表达式,适合处理大文件或自动化脚本。


1. sed 基本语法

sed [选项] '命令' 文件名

常用选项:

  • -n:只输出处理后的行(默认会输出所有行)
  • -i:直接修改文件(不加 -i 则只输出到屏幕,不修改原文件)
  • -e:执行多个命令(如 sed -e 's/a/A/' -e 's/b/B/' file
  • -r:使用扩展正则表达式(支持 +, ?, | 等)

2. sed 常用命令

命令 说明 示例
s 替换(substitute) sed 's/old/new/' file
d 删除(delete) sed '/pattern/d' file
p 打印(print) sed -n '/pattern/p' file
a 追加(append) sed '3a newline' file
i 插入(insert) sed '3i newline' file
c 替换整行(change) sed '/pattern/c newline' file

3. sed 常见用法示例

(1)替换文本

# 替换每行第一个匹配的 "foo" 为 "bar"
sed 's/foo/bar/' file.txt

# 替换所有匹配的 "foo"(加 g 表示全局替换)
sed 's/foo/bar/g' file.txt

# 只替换第 2 行的 "foo"
sed '2s/foo/bar/' file.txt

# 替换第 2-5 行的 "foo"
sed '2,5s/foo/bar/' file.txt

# 替换包含 "pattern" 的行中的 "foo"
sed '/pattern/s/foo/bar/' file.txt

(2)删除行

# 删除第 3 行
sed '3d' file.txt

# 删除第 2-5 行
sed '2,5d' file.txt

# 删除包含 "pattern" 的行
sed '/pattern/d' file.txt

# 删除空行
sed '/^$/d' file.txt

(3)打印特定行

# 打印第 5 行
sed -n '5p' file.txt

# 打印第 2-5 行
sed -n '2,5p' file.txt

# 打印包含 "pattern" 的行
sed -n '/pattern/p' file.txt

# 打印匹配 "start" 到 "end" 之间的行
sed -n '/start/,/end/p' file.txt

(4)插入/追加行

# 在第 3 行后追加 "new line"
sed '3a new line' file.txt

# 在第 3 行前插入 "new line"
sed '3i new line' file.txt

# 在匹配 "pattern" 的行后追加 "new line"
sed '/pattern/a new line' file.txt

(5)替换整行

# 替换第 3 行为 "new line"
sed '3c new line' file.txt

# 替换包含 "pattern" 的整行
sed '/pattern/c new line' file.txt

(6)直接修改文件(-i 选项)

# 替换并直接修改文件(危险!建议先不加 -i 测试)
sed -i 's/foo/bar/g' file.txt

# 备份原文件并修改(加 .bak 备份)
sed -i.bak 's/foo/bar/g' file.txt

4. 高级用法

(1)使用正则表达式

# 替换所有数字为 "X"
sed 's/[0-9]/X/g' file.txt

# 替换所有以 "a" 开头的单词为 "A"
sed 's/\ba\w*/A/g' file.txt

# 删除所有 HTML 标签
sed 's/<[^>]*>//g' file.html

(2)多命令组合

# 替换 "foo" 为 "bar",并删除空行
sed -e 's/foo/bar/g' -e '/^$/d' file.txt

# 使用分号分隔多个命令
sed 's/foo/bar/; s/hello/world/' file.txt

(3)引用匹配内容(& 和 \1, \2, ...)

# 给所有数字加括号
sed 's/[0-9]/(&)/g' file.txt

# 交换第 1 列和第 2 列(假设用空格分隔)
sed 's/\(.*\) \(.*\)/\2 \1/' file.txt

5. 经典应用场景

(1)批量替换文件内容

# 替换所有 .txt 文件中的 "old" 为 "new"
sed -i 's/old/new/g' *.txt

(2)提取特定行

# 提取日志文件中的错误行
sed -n '/ERROR/p' app.log

(3)删除注释行

# 删除所有以 # 开头的行
sed '/^#/d' config.conf

(4)格式化文本

# 在每行行首添加行号
sed = file.txt | sed 'N;s/\n/ /'

6. 总结

  • sed 主要用于流式文本处理,适合查找、替换、删除、插入等操作。
  • 常用命令:
    • s:替换
    • d:删除
    • p:打印
    • a/i/c:追加/插入/替换整行
  • 使用 -i 直接修改文件,但需谨慎(建议先测试)。
  • 支持正则表达式,可结合 grepawk 进行复杂文本处理。

掌握 sed 可以极大提高 Linux 下的文本处理效率! 🚀

全部评论(0)

头像
😃 😁 😅 😂 😍 😜 😝 🤑 🥵 🥰 😙 😎 😵 😭 😱 😖 🥳 👽 🙈 🤡 😤 💣 💯 💢 ❤️ 👍 👏 👋 👌 🤏 🙏
还没有任何评论哟~
目录