博客
关于我
Linux - 不得不知的利器(sed)
阅读量:139 次
发布时间:2019-02-26

本文共 1645 字,大约阅读时间需要 5 分钟。


sed 是最早开始支持正则表达式的工具之一,能够以非交互方式编辑文件。通过 sed,用户可以轻松完成文件的增、删、改、查等操作。以下是 sed 的基本操作和常用命令的详细说明。

sed 命令格式

sed 的命令格式为:

sed [options] ‘command’ file(s)sed [options] -f scriptfile file(s)

其中,options 是 sed 的常用选项,command 是具体的 sed 命令,file(s) 是需要处理的文件路径。

sed 常用命令选项

  • -n:屏蔽默认输出功能。
  • -r:支持扩展正则表达式。
  • -i:直接修改源文件,备份前先将文件内容复制到临时文件中。
  • -e:执行多个 sed 命令,支持用逗号分隔多个指令。
  • -f:执行存储在脚本文件中的 sed 命令。

sed 基本操作指令

以下是 sed 的常见操作指令:

  • p:打印当前匹配的数据行。
  • l:打印当前匹配的数据行(与 p 类似)。
  • =:打印当前读取的数据行数。
  • a text:在匹配的数据行后面追加文本内容。
  • i text:在匹配的数据行前面插入文本内容。
  • d:删除匹配的数据行整行内容。
  • c text:将匹配的数据行内容替换为特定的文本内容。
  • r filename:从文件中读取数据并追加到匹配的数据行后面。
  • w filename:将当前匹配到的数据写入特定的文件中。
  • q:立即退出 sed 脚本。

sed 数据定位方法

sed 提供多种定位方法:

  • number:直接根据行号匹配数据。
  • first~step:从 first 行开始,步长为 step,匹配所有满足条件的数据行。
  • $:匹配最后一行。
  • /regexp/:使用正则表达式匹配数据行。
  • \c:使用正则表达式匹配数据行,\c 为任意字符。
  • addr1,addr2:直接使用行号定位,匹配从 addr1 到 addr2 的所有字符。
  • addr1,+N:直接使用行号定位,匹配从 addr1 开始及后面的 N 行。

sed 命令示例

  • 打印文件内容:

    sed -n 'p' /etc/hosts

    该命令将仅显示文件的内容,每行打印一次。

  • 显示文件的第 1 行或第 2 行:

    sed -n '1p' /etc/hostssed -n '2p' /etc/hosts
  • 从管道读取数据:

    echo "hello,world" | sed -n 'p'

    该命令将输出 "hello,world"。

  • 显示文件最后一行的内容:

    sed -n '$p' /etc/hosts
  • 显示以 "http" 开头的数据行:

    sed -n '/^http/p' /etc/hosts
  • 显示包含数字的数据行:

    sed -n '/\d/p' /etc/hosts
  • 显示以 "bash" 结尾的行并显示:

    sed -n '/bash$/p' /etc/hosts
  • 显示所有行的第 1 列到第 3 列:

    sed -n '1~3p' /etc/hosts
  • sed 指令分隔符

    多条 sed 指令可以通过分号分隔执行:

    sed -n 'p; l' /etc/hosts

    sed 替换和删除操作

    • 替换操作:

      sed -n 's/old/new/g' /etc/hosts

      该命令将将文件中的所有 "old" 替换为 "new"。

    • 删除操作:

      sed -i '/bash$/d' /etc/hosts

      该命令将删除文件中所有以 "bash" 结尾的行。

    sed 脚本文件执行

    将 sed 指令写入脚本文件后,可以使用 -f 选项执行:

    sed -f scriptfile /etc/hosts

    注意事项

    在实际操作中,建议先在备份文件上测试 sed 指令的效果。对于需要多次修改的文件,可以将 sed 指令写入脚本文件后使用 -f 选项执行。

    通过以上命令,用户可以根据需要对文件进行增删改查操作。sed 提供了丰富的定位方式和操作指令,能够满足多种文件处理需求。

    转载地址:http://oziy.baihongyu.com/

    你可能感兴趣的文章
    python----线程、进程、协程的区别及多线程详解
    查看>>
    python---5
    查看>>
    python---使用celery分布式系统异步发送短信(云通讯)来验证登录
    查看>>
    python--003--百分号字符串拼接、format
    查看>>
    Python--10、线程
    查看>>
    Python--Redis实战:第四章:数据安全与性能保障:第4节:复制
    查看>>
    python--基本代码规范
    查看>>
    Python--抽象类接口类
    查看>>
    PYTHON--欧拉习题二
    查看>>
    python--高级应用总结
    查看>>
    python-520表白代码,我看谁说程序员不懂浪漫,送你几套表白代码,一步到位
    查看>>
    Python-Asyncio TypeError:无法在‘;等待‘;表达式中使用对象DICT
    查看>>
    Python-AttributeError:‘;dict&39;对象没有属性‘;序列‘;
    查看>>
    Python-ldap:是否可以在不显式写入密码的情况下进行绑定?
    查看>>
    python出现 unknown encoding: idna 的处理方法
    查看>>
    Python出现 RuntimeError: dictionary changed size during iteration 的解决方法
    查看>>
    Python-numpy(2)数组的操作
    查看>>
    Python-Numpy的tile函数用法
    查看>>
    python-open函数
    查看>>
    Python-Pandas-将特定函数应用于给定级别-多索引数据框架
    查看>>