Linux文件三剑客sed命令用法详解

sed是一种流编辑器,它是文本处理中非常强大的工具,能够完美的配合正则表达式使用,用法简单实用,非常灵活。
        工作原理:sed命令处理文本时,把当前处理的行存储在一个临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。

在sed高级编辑命令中,还会调用另一个临时缓冲区,称为“保持空间”(hold space),在模式空间中为处理完的行可以临时存储在保持空间中,在临时空间接着处理下一行,然后在将保持空间中的行重新存储在临时空间中做后续处理,这样就使得sed命令变的功能得更为强大。

sed命令不仅可以查看,筛选文本内容,还可以对一个或多个文本进行编辑,更改,简化对文件的反复操作。Linux文件三剑客sed命令用法详解

        sed中有自己的脚本命令,配合这些脚本文件,sed可以实现许多对文本的索引,编辑功能。

sed命令常用选项:sed [option] ‘script’ file

option:

-n :不输出模式空间内容到屏幕,即不自动打印
    -e :多点编辑
    -f :/ PATH/SCRIPT_FILE :  从指定文件中读取编辑脚本
    -r :支持使用扩展正则表达式
    -i : 修改源文件
    -i.bak : 备份文件并原处编辑
    -v : 打印版本和版权信息。

script:’地址+命令’

地址:

  1. )没有地址:默认对全文进行处理。
  2. )单地址:
    X:指定的行
    /pattern/:被匹配到的每一行
  3. )地址范围:
    X1,X2 : 选取第 X1 行到 X2 行之间的行
    X1,+X2 : 选取第 X1 行之后的 X2 个行
    /pat1/,/pat2/ : 选取 pat1 第一次匹配到的行到 pat2 第一次匹配到的行之间的行
    X,/pat1/ : 选取 X 第一次匹配到的行到 pat1 第一次匹配到的行
  4. )X1~X2 : 步进
    1~2 : 从1开始,步进为2(奇数行)
    2~2 : 从2开始,步进为2(偶数行)

命令:

d : 删除模式空间匹配的行,并立即启用下一轮循环
    p : 打印当前模式空间内容,追加到默认输出之后
    a [\]text : 在指定行后面追加文本。支持使用\n 实现多行追加
    i [\]text : 在行前面插入文本
    c [\]text : 替换行为单行或多行文本
    w : 保存模式匹配的行至指定文件
    r : 读取指定文件的文本至模式空间中匹配到的行后
    = : 为模式空间中的行打印行号
    ! : 模式空间中匹配行取反处理
    s/X/X/g : 查找替换, 支持使用其它分隔符,s@@@ ,s###
    y/XX/XX/ : 检索所有匹配的项,替换为对应的字符

高级编辑命令:

P : 打印模式空间开端至\n 内容,并追加到默认输出之前
    h : 把模式空间中的内容覆盖至保持空间中
    H : 把模式空间中的内容追加至保持空间中
    g : 从保持空间取出数据覆盖至模式空间
    G : 从保持空间取出内容追加至模式空间
    x : 把模式空间中的内容与保持空间中的内容进行互换
    n : 读取匹配到的行的下一行覆盖至模式空间
    N : 读取匹配到的行的下一行追加至模式空间
    d : 删除模式空间中的行
    D : 如果模式空间包含换行符,则删除直到第一个换行符的模式空间中的文本
    # : 把注释扩展到下一个换行符以前。

案列

基本用法:

首先我们自己创建了一个方便查看效果的文件newf
Linux文件三剑客sed命令用法详解

 

基本筛选功能:

  1. 打印一到3行
    Linux文件三剑客sed命令用法详解
  2. 查看文件带有b的行到带有a的行
    Linux文件三剑客sed命令用法详解
  3. 打印奇数行
    Linux文件三剑客sed命令用法详解
  4. 打印带有字母a或带有字母b的行
    Linux文件三剑客sed命令用法详解
  5. 把所有b,c都换成a
    Linux文件三剑客sed命令用法详解
    如果不带g 每行只会替换第一个(默认)匹配到的字符
    g可以换成数字,表示替换匹配到的第几个字符
    可以将字符替换为 空 表示删除
  6. 在第3行前一行插入字符
    Linux文件三剑客sed命令用法详解
  7. 在第3行后插入字符
    Linux文件三剑客sed命令用法详解
  8. 将每行第二个字符删除
    Linux文件三剑客sed命令用法详解
    如图所示,所有的空格被删掉。-r选项支持扩展正则表达式(相当于sed ‘s/^\(.\)\(.\)/\1/’)另一种方式sed ‘/.//2’ newfsed ”
  9. 把所有abc替换为ABC
    Linux文件三剑客sed命令用法详解
    -y选项是把前面匹配的项全部对应替换为后面的字符

进阶用法:

  1. 将1行放到3行后面
    Linux文件三剑客sed命令用法详解
    h:将模式空间的内容覆盖保持空间中
    G:将保持空间内容追加到模式空间中
  2. 在每行后面添加1个空行
    Linux文件三剑客sed命令用法详解
    保持空间默认有一个空白行
  3. 把1到4行放在5行后面
    Linux文件三剑客sed命令用法详解
    1h:覆盖掉保持空间中的空白行
    1,4d:删除最前面的4行
  4. 将第1行替换到第3行
    Linux文件三剑客sed命令用法详解

 

总结:通过一些简单的例子,可以看出sed命令简单,但是功能复杂多样,需要通过大量的练习才能熟练掌握。sed命令在运用中十分重要,它可以批量搜索,显示,修改文本内容,这是必须要学会,并熟练使用的工具。

原创文章,作者:kstg5663294,如若转载,请注明出处:http://www.178linux.com/78465

(6)
kstg5663294kstg5663294
上一篇 2017-06-24 16:08
下一篇 2017-06-24 17:28

相关推荐

  • N21天天第十二周课程练习

    1、请描述一次完整的http请求处理过程; 1、建立TCP连接 2、Web浏览器向Web服务器发送请求 3、Web浏览器发送请求头信息   建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME   信息包括请求修饰符、客户机信息和可能的内容 4、Web服务器应答…

    Linux干货 2016-10-31
  • 马哥教育网络班21期第6周课程练习

    一、vim编辑器的使用 二、练习题 1、复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#; [root@www ~]# cp /etc/rc.d/rc.sysinit /tmp [root@www ~]# l…

    Linux干货 2016-08-15
  • MariaDB数据库基于SSL实现远程访问和主从复制

    MariaDB数据库基于SSL实现远程访问和主从复制 实验环境 系统环境:Centos6.5 数据库版本:5.5.36-MariaDB-log MariaDB Server 虚机数量:2 方案实施: 1,配置CA;并为node1和node2生成key和证书 2,在node1和node2上安装Mariadb 3,配置节点1为MariaDB主节点 4,配置节点2…

    Linux干货 2016-05-18
  • 网络管理之基础知识

    Linux的网络配置 IP地址   它们可唯一标识 IP 网络中的每台设备  每台主机(计算机、网络设备、外围设备)必须具有唯 一的地址  IP地址由两部分组成: • 网络ID: • 标识网络 • 每个网段分配一个网络ID • 主机 ID: • 标识单个主机 • 由组织分配给各设备   IPv4地址格式:点分十进制记法  …

    Linux干货 2016-09-10
  • 计算机组成及功能

    计算器:进行逻辑和算数运算 控制器:读取,接受,发出控制指令 存储器:存取程序和数据 I/O设备:输入指令并显示到标准输出设备

    Linux干货 2018-03-03
  • N22-妙手-第九周课程练习

    1、写一个脚本,判断当前系统上所有用户的shell是否为可登录shell(即用户的shell不是/sbin/nologin);分别这两类用户的个数;通过字符串比较来实现;: #!/bin/bash # declare -i numberOfLoginUser=0 declare -i numberOfUnloginUs…

    Linux干货 2016-10-19