插件窝 干货文章 掌握 Linux sed 命令综合指南

掌握 Linux sed 命令综合指南

sed 文件 file bash 1029    来源:    2025-04-17

Linux sed 命令综合指南

sed (Stream Editor) 是 Linux/Unix 系统中强大的流式文本编辑器,用于对输入流(文件或管道)进行基本的文本转换。以下是 sed 命令的全面指南:

基本语法

sed [选项] '命令' 输入文件

或通过管道:

cat 文件 | sed [选项] '命令'

常用选项

选项 说明
-n 禁止默认输出,只打印处理过的行
-e 添加脚本到命令执行
-f 添加脚本文件到命令执行
-i 直接修改文件内容
-r 使用扩展正则表达式

基本命令

1. 替换文本

sed 's/原字符串/新字符串/' 文件

示例:

sed 's/foo/bar/' file.txt       # 将每行第一个foo替换为bar
sed 's/foo/bar/g' file.txt      # 全局替换
sed 's/foo/bar/2' file.txt      # 只替换每行第二个foo

2. 删除行

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

示例:

sed '5d' file.txt              # 删除第5行
sed '2,4d' file.txt            # 删除2-4行
sed '/^#/d' file.txt           # 删除所有注释行(以#开头)

3. 打印特定行

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

示例:

sed -n '10p' file.txt          # 打印第10行
sed -n '5,8p' file.txt         # 打印5-8行
sed -n '/error/p' log.txt      # 打印包含error的行

4. 插入和追加文本

sed 'Ni\插入内容' 文件         # 在第N行前插入
sed 'Na\追加内容' 文件         # 在第N行后追加

示例:

sed '3i\插入的行' file.txt     # 在第3行前插入
sed '$a\最后一行后追加' file.txt # 在文件末尾追加

5. 修改行

sed 'Nc\新内容' 文件           # 替换第N行

示例:

sed '5c\这是新的第5行' file.txt

高级用法

1. 多命令执行

sed -e 's/foo/bar/' -e 's/baz/qux/' file.txt

或使用分号分隔:

sed 's/foo/bar/; s/baz/qux/' file.txt

2. 使用正则表达式

sed -r 's/[0-9]{3}/***/g' file.txt  # 替换所有3位数字为***

3. 引用匹配内容

sed 's/\(foo\) bar/\1 baz/' file.txt  # 将"foo bar"替换为"foo baz"
sed -r 's/(foo) bar/\1 baz/' file.txt # 使用扩展正则表达式

4. 文件内修改

sed -i 's/foo/bar/g' file.txt        # 直接修改文件
sed -i.bak 's/foo/bar/g' file.txt    # 修改前备份原文件为file.txt.bak

5. 地址范围

sed '/start/,/end/d' file.txt        # 删除从包含start到包含end的所有行
sed '10,20s/foo/bar/g' file.txt      # 只在10-20行替换

实用示例

  1. 删除空白行:
sed '/^$/d' file.txt
  1. 在每行行首添加内容:
sed 's/^/# /' file.txt
  1. 转换DOS换行符(CRLF)为Unix换行符(LF):
sed 's/\r$//' dosfile.txt > unixfile.txt
  1. 提取日志文件中特定时间段的记录:
sed -n '/2023-01-01 10:00:00/,/2023-01-01 11:00:00/p' logfile.txt
  1. 反转文件的行顺序:
sed '1!G;h;$!d' file.txt

注意事项

  1. 使用-i选项会直接修改文件,建议先测试命令或备份文件
  2. sed默认使用基本正则表达式,-r选项启用扩展正则表达式
  3. 复杂的文本处理可能需要结合awk或其他工具
  4. sed是按行处理的,不适合处理多行模式

掌握这些sed技巧可以大大提高文本处理的效率,特别是在处理日志文件、配置文件批量修改等场景中非常有用。