插件窝 干货文章 linux的sed命令如何使用

linux的sed命令如何使用

sed 替换 文件名 bash 511    来源:    2025-04-23

sed(Stream Editor)是Linux中强大的文本处理工具,主要用于对文本进行查找、替换、删除、插入等操作。以下是sed的详细使用指南:


1. 基本语法

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

2. 常用选项

选项 作用
-n 仅显示处理后的行(抑制默认输出)
-i 直接修改文件内容(慎用!建议先不加-i测试)
-e 指定多个命令(如 sed -e 'cmd1' -e 'cmd2'
-r 启用扩展正则表达式(类似grep -E

3. 核心操作命令

3.1 替换文本

sed 's/旧内容/新内容/[flags]' 文件名
  • flags
    • g:全局替换(默认每行只替换第一个匹配)
    • 数字:替换第N个匹配(如s/old/new/2替换第二个)
    • p:打印替换成功的行(常与-n联用)
    • i:忽略大小写(需结合-rsed -i 's/old/new/i'

示例

sed 's/foo/bar/g' file.txt       # 替换所有foo为bar
sed -i 's/hello/world/2' file    # 替换每行第二个hello为world

3.2 删除行

sed 'Nd' 文件名                  # 删除第N行
sed 'M,Nd' 文件名                # 删除M到N行
sed '/pattern/d' 文件名          # 删除匹配pattern的行

示例

sed '3d' file.txt                # 删除第3行
sed '2,5d' file.txt              # 删除2-5行
sed '/error/d' file.txt          # 删除含"error"的行

3.3 插入/追加文本

sed 'i\插入内容' 文件名          # 在每行前插入
sed 'a\追加内容' 文件名          # 在每行后追加
sed '3i\插入内容' 文件名         # 在第3行前插入

示例

sed '2i\### Start ###' file.txt  # 在第2行前插入注释

3.4 打印特定行

sed -n 'Np' 文件名               # 打印第N行
sed -n '/pattern/p' 文件名       # 打印匹配的行
sed -n 'M,Np' 文件名             # 打印M到N行

示例

sed -n '5p' file.txt             # 打印第5行
sed -n '/error/p' log.txt        # 打印含"error"的行

3.5 多命令组合

sed -e 's/foo/bar/' -e '/baz/d' file.txt  # 先替换后删除

4. 高级用法

4.1 正则表达式

  • ^:行首(sed 's/^#//' 删除行首的#
  • $:行尾(sed 's/old$/new/' 替换行尾的old)
  • .*:任意字符(sed 's/f.*o/bar/'

4.2 引用匹配

  • &引用匹配内容: bash echo "123" | sed 's/[0-9]/[&]/g' # 输出: [1][2][3]
  • 分组捕获(需加-r): bash echo "hello world" | sed -r 's/(hello) (world)/\2 \1/' # 输出: world hello

4.3 文件内修改(慎用!)

sed -i.bak 's/old/new/g' file.txt  # 修改文件,并备份原文件为file.txt.bak

5. 经典案例

  1. 删除空白行bash sed '/^$/d' file.txt
  2. 替换文件扩展名bash ls *.txt | sed 's/\.txt$/.csv/'
  3. 提取特定行范围bash sed -n '10,20p' log.txt > excerpt.txt

注意事项

  1. 使用-i前务必先不加-i测试命令!
  2. 正则表达式特殊字符需转义(如\?\+)。
  3. 默认sed不会修改原文件,输出到终端。

通过灵活组合这些功能,sed可以高效处理文本任务。建议通过man sed查看完整手册。