Carry の Blog Carry の Blog
首页
  • Nginx
  • Prometheus
  • Iptables
  • Systemd
  • Firewalld
  • Docker
  • Sshd
  • DBA工作笔记
  • MySQL
  • Redis
  • TiDB
  • Elasticsearch
  • Python
  • Shell
  • MySQL8-SOP手册
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Carry の Blog

好记性不如烂键盘
首页
  • Nginx
  • Prometheus
  • Iptables
  • Systemd
  • Firewalld
  • Docker
  • Sshd
  • DBA工作笔记
  • MySQL
  • Redis
  • TiDB
  • Elasticsearch
  • Python
  • Shell
  • MySQL8-SOP手册
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 工作笔记

    • 实用linux命令-nc
    • 实用linux命令-lsof
    • 实用linux命令-ss
    • Bash 备忘清单
    • Ansible 备忘清单
    • linux 文件的权限和属性
    • GPT分区使用 `parted` 扩展分区的操作流程
    • 实用linux命令-sed
    • VSCode快捷键备忘录
  • K8S

  • Systemd

  • Nginx

  • Supervisord

  • OpenLdap

  • OpenVPN

  • GitLab

  • Sshd

  • WebDev

  • Docker

  • Prometheus

  • Rclone

  • Iptables

  • Firewalld

  • Linux笔记
  • 工作笔记
Carry の Blog
2022-03-10

实用linux命令-sed原创

sed命令简介

sed(Stream Editor)是一个强大的文本处理工具,主要用于文本替换、删除、新增和选取等操作。它是一个面向行的文本处理工具,可以逐行处理文件内容而不需要打开文件。sed特别适合用于自动化脚本中进行文本转换。


sed基本语法

sed [选项] 'command' 输入文本
1

说明:

  • 选项控制sed的行为
  • command是要执行的操作
  • 输入文本是要处理的文件或标准输入

sed常用选项

  1. 安静模式

    sed -n 'command' file
    
    1

    说明:

    • -n选项启用安静模式,默认情况下sed会打印所有行
    • 使用此选项后,只有经过特殊处理的行才会被输出
  2. 直接编辑文件

    sed -i 'command' file
    
    1

    说明:

    • -i选项直接修改文件内容,而不是输出到屏幕
    • 建议在使用前先备份文件
  3. 多命令执行

    sed -e 'command1' -e 'command2' file
    
    1

    说明:

    • -e选项允许在一次调用中执行多个命令
  4. 使用命令文件

    sed -f script.sed file
    
    1

    说明:

    • -f选项从文件中读取sed命令,适合复杂操作
  5. 使用扩展正则表达式

    sed -r 'command' file
    
    1

    说明:

    • -r选项启用扩展正则表达式语法

sed常用命令

  1. 替换文本 (s命令)

    sed 's/pattern/replacement/g' file
    
    1

    说明:

    • s表示替换
    • pattern是要查找的模式
    • replacement是替换的内容
    • g表示全局替换(一行中所有匹配)
    • 不加g只替换每行第一次匹配
  2. 删除行 (d命令)

    sed '/pattern/d' file
    
    1

    说明:

    • 删除包含指定模式的行
    • 例如:sed '/^$/d' file 删除所有空行
  3. 追加文本 (a命令)

    sed '/pattern/a 新文本' file
    
    1

    说明:

    • 在匹配行后追加文本
    • 新文本会出现在匹配行的下一行
  4. 插入文本 (i命令)

    sed '/pattern/i 新文本' file
    
    1

    说明:

    • 在匹配行前插入文本
    • 新文本会出现在匹配行的上一行
  5. 替换整行 (c命令)

    sed '/pattern/c 新文本' file
    
    1

    说明:

    • 用新文本替换包含指定模式的整行
  6. 打印特定行 (p命令)

    sed -n '/pattern/p' file
    
    1

    说明:

    • 只打印匹配指定模式的行
    • 通常与-n选项一起使用

sed高级用法

  1. 使用行号

    sed '1,5d' file  # 删除1-5行
    sed '3,7s/old/new/g' file  # 只替换3-7行
    
    1
    2

    说明:

    • 可以使用行号指定操作范围
    • $表示最后一行,如5,$d删除第5行到最后
  2. 使用正则表达式

    sed '/^#/d' file  # 删除所有注释行(以#开头)
    sed '/start/,/end/d' file  # 删除从start到end之间的所有行
    
    1
    2

    说明:

    • 可以使用正则表达式匹配模式
    • 可以指定范围模式
  3. 保留备份

    sed -i.bak 's/old/new/g' file
    
    1

    说明:

    • -i.bak会在修改文件的同时创建一个后缀为.bak的备份文件
  4. 多个替换操作

    sed 's/old1/new1/g; s/old2/new2/g' file
    
    1

    说明:

    • 使用分号分隔多个命令
    • 也可以使用-e选项:sed -e 's/old1/new1/g' -e 's/old2/new2/g' file
  5. 使用&引用匹配文本

    sed 's/hello/&, world/g' file  # hello 替换为 hello, world
    
    1

    说明:

    • &代表匹配的文本本身
  6. 使用捕获组

    sed -r 's/(foo)-(bar)/\2-\1/g' file  # foo-bar 替换为 bar-foo
    
    1

    说明:

    • 使用\1, \2等引用捕获的组

实用sed示例

  1. 替换带有关键字的整行

    # 替换前先显示出来看一下
    sed -n '/mykeywords/c xxxxxxxxxxxxxx' `grep -rl 'mykeywords'`
    
    # -i直接替换
    sed -i '/mykeywords/c xxxxxxxxxxxxxx' `grep -rl 'mykeywords'`
    
    1
    2
    3
    4
    5

    说明:

    • 结合grep -r查找包含关键字的文件
    • 使用c命令替换整行内容
  2. 删除文件中的空行

    sed -i '/^$/d' file
    
    1

    说明:

    • ^$匹配空行(行首紧跟行尾)
  3. 在文件的每行前添加内容

    sed 's/^/添加的前缀/' file
    
    1

    说明:

    • ^匹配行首,在行首添加文本
  4. 在文件的每行后添加内容

    sed 's/$/添加的后缀/' file
    
    1

    说明:

    • $匹配行尾,在行尾添加文本
  5. 只显示指定行范围

    sed -n '10,20p' file  # 只显示10-20行
    
    1

    说明:

    • 结合-n和p命令,只打印指定范围的行
  6. 多个文件批量替换

    sed -i 's/old/new/g' file1 file2 file3
    
    1

    说明:

    • sed可以同时处理多个文件

sed与其他工具的配合

  1. 与grep结合

    grep "pattern" file | sed 's/foo/bar/g'
    
    1

    说明:

    • 先用grep过滤出包含特定模式的行
    • 然后用sed进行处理
  2. 与awk结合

    sed 's/pattern/replacement/g' file | awk '{print $1}'
    
    1

    说明:

    • sed处理后的输出可以传递给awk进一步处理
  3. 在shell脚本中使用

    for file in *.txt; do
        sed -i 's/old/new/g' "$file"
    done
    
    1
    2
    3

    说明:

    • 在循环中批量处理多个文件

sed注意事项

  1. 转义字符

    • 在模式中使用特殊字符(如/, ., *等)需要转义
    • 例如:sed 's/\/path\/to\/file/\/new\/path/g' file
  2. 不同分隔符

    • 可以使用不同的分隔符来避免大量转义
    • 例如:sed 's#/path/to/file#/new/path#g' file
  3. 大文件处理

    • sed是逐行处理的,对大文件也很高效
    • 但大量复杂的替换操作可能会影响性能
  4. 备份重要文件

    • 使用-i选项修改文件前,建议先备份
    • 或使用-i.bak自动创建备份

上次更新: 4/24/2025

← GPT分区使用 `parted` 扩展分区的操作流程 VSCode快捷键备忘录→

最近更新
01
tidb fast ddl
04-04
02
TiDB配置文件调优 原创
04-03
03
如何移除TiDB中的表分区 原创
04-03
更多文章>
Theme by Vdoing
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式