文本处理工具之SED流编辑器

文本处理三剑客之SED(流编辑器)

sed的工作方式:在指定文件中,按行读取内容至模式空间,然后根据sed的scripts编辑改行内容,编辑完毕后输出至屏幕,再读取下一行进行处理。如果有该行内容未被处理完毕就有新的内容要进行编辑,则把该行内容移至保持空间中,,保持空间中的内容可以随时调回模式空间中。

sed的使用

使用格式:sed [options...] ‘scipts‘ file

  • 常用选项:
  • -n:不输出模式空间中的内容至标准输出(不自动打印)
  • -e script:多点编辑
    sed -e ‘[email protected]^#[[:space:]]@[email protected]‘ -e ‘/^UUID/‘ /etc/fatab
  • -f sed_script_fie:调用sed的编辑脚本文件(文件中每行一个编辑脚本)
  • -r:支持使用扩展正则表达式
  • -i:直接编辑源文件
  • -i.bak:备份源文件并在原文编辑

地址定界机制:

  • 空地址:对全文进行处理

    1. 单地址

      • #:指定第#行
      • $:最后一行
      • /pattern/:被此模式所匹配到的行
    2. 地址范围:
      • #,#:第#行到第#行
      • #,+#:第#行到#+#行
      • #,/pattern/:第#行到被模式匹配到的行
      • /pattern1/,/pattern2/:第一次被模式1匹配到的行到第一次被模式2匹配到的行
    3. 步进:~
      • 1~2:所有奇数行
      • 2~2:所有偶数行

        编辑命令:

  • d:删除
  • p:显示模式空间中的内容
  • a \test:在行后面追加文本“test”,支持使用\n实现多行追加
  • i \test:在行前面追加文本“test”支持使用\n实现多行追加

    追加的时候,要插入变量使用‘‘‘$变量‘‘‘

  • c \test:把匹配到的行替换为此处指定的文本
  • w file:保存模式空间中的内容至文件中,相当于重定向
  • r file:读取指定文件中的内容自己当前文件被模式匹配的行的后面
  • =:为模式匹配到的行打印行号
  • !:条件取反
  • s///:查找替换,其分隔符可自定义,常用的有[email protected]@@,s###等

    替换标记:

    • g:全局替换
    • w file:将替换完的结果保存到指定文件中
    • p:显示替换成功的行
      支持使用\1,\2...后向引用,&表示全面搜索到的全部内容

练习

  • 删除/boot/grub/grub2.cfg文件中所有以空白字符开头的行的行首的所有空白字符;
    ~]# sed ‘[email protected]^[[:space:]][email protected]@‘ /etc/grub2.cfg

    1. 删除/etc/fstab文件中所有以#开头的行的行首的#号及#后面的所有空白字符;
      ~]# sed ‘[email protected]^#[[:space:]]*@@‘ /etc/fstab
    2. 在/etc/grub2.cfg文件中包含linux16的行的行尾加上net.ifnames=0
      sed -nr ‘/linux16/s/.*/& net.ifnames=0/p‘ /etc/grub2.cfg

      sed的高级编辑命令:

  • h:把模式空间中的内容覆盖至保持空间中
  • H:把模式空间中的内容追加至保持空间中
  • g:把保持空间中的内容覆盖至模式空间中
  • G:把保持空间中的内容追加至模式空间中
  • x:把模式空间中的内容与保持空间中的内容互换
  • n:覆盖读取匹配到的行的下一行到模式空间中
  • N:追加读取匹配到的行的下一行到模式空间中
  • d:删除模式空间中的行
  • D:删除多行模式空间中的开始到\n的行

    示例:

    1. sed -n ‘n;p‘ FILE:显示偶数行;
    2. sed ‘n;d‘ FILE:显示奇数行;
    3. sed ‘1!G;h;$!d‘ FILE:逆序显示文件的内容; 等价于sed -n ‘1!G;h;$p‘
    4. sed ’$!d‘ FILE:取出最后一行;
    5. sed ‘$!N;$!D‘ FILE:取出文件后两行;
    6. sed ‘N;D‘:取出最后一行;
    7. sed ‘/^$/d;G‘ FILE:删除原有的所有空白行,而后为所有的非空白行后添加一个空白行;
    8. sed ‘G‘ FILE:在原有的每行后方添加一个空白行;

原文地址:https://blog.51cto.com/13408885/2396004

时间: 2024-10-27 13:06:59

文本处理工具之SED流编辑器的相关文章

文本处理三剑客之sed流编辑器

流编辑器 sed 模式空间,默认不编辑原文件,仅对模式空间中的数据做处理:处理结束后,将模式空间中数据打印至屏幕.sed是一个行编辑器. sed [options] 'Address Command' file ... Option: -n: 静默模式, 不再默认显示模式空间中的内容-i: 直接修改原文件-e SCRIPT 可以同时执行多个脚本, 操作-f /PATH/TO/SED_SCRIPT  如: sed -f /path/to/scripts file ( 指定 sed 的脚本文件)-r

Linux基础之sed流编辑器详解

之前介绍了三大文本编辑器的grep,这里介绍比grep功能更强的sed流编辑器 sed是什么? sed是Stream EDitor的缩写,man中对sed的简洁为 sed - stream editor for filtering and transforming text 它的主要功能是对文本的过滤与替换. sed的工作原理 sed的工作过程:sed是一个流编辑器,所谓流编辑器是指sed每次只从文件或stdin中读入一行,将读入的行保存至模式空间然后根据指定的要求对其进行处理,并将处理后的结果

关于文本处理工具之SED

处理文本的工具sed 行编辑器:         sed 是一种流编辑器,它一次处理一行内容,处理时,把当前处理的行存储在临时缓冲区中,我们称为"模式空间"        接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕.接着处理以下一行,这样不断重复,直到文件末尾.        文件内容并没有改变,除非你使用重定向存储输出.sed主要用来自动编辑一个或多个文件,简化对文件的反复操作,编写转换程序等 还有一种模式叫做保持空间:sed工作机制是每次读取一行文本至'

文本处理工具之sed

sed 行编辑器 sed是一种流编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为"模式空间"(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕.然后读入下行,执行下一个循环. 如果没有使诸如'D' 的特殊命令,那会在两个循环之间清空模式空间,但不会清空保留空间.这样不断重复,直到文件末尾.文件内容并没有改变,除非你使用重 定向存储输出. 功能 主要用来自动编辑一个或多个文件,简化对文件的反复操作,编写转换程序

Linux系统上的文本处理工具之sed

sed命令 sed是一种在线编辑器.行编辑器,一次处理一行内容,在处理时,把当前处理的行存储在临时缓冲区当中,该缓冲区称为"模式空间"(pattern space),接着用sed命令处理缓冲区中的内容,处理完毕后,把缓冲区的内容送到标准输出:然后紧接着去处理下一行,重复完成相同的操作,直至文件结尾:sed处理的整个过程中,对象文件中的内容并没有改变,除非使用重定向来存储处理后的结果.sed主要用来自动编辑一个或多个文件,简化对文件的反复操作过程. sed跟我们之前讲过的文本处理工具vi

Linux下的sed流编辑器命令详解

sed是stream editor的简称,也就是流编辑器.它一次处理一行内容,处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕.接着处理下一行,这样不断重复,直到文件末尾.文件内容并没有 改变,除非你使用重定向存储输出. 使用语法 sed命令的使用规则是这样的: sed [option] 'command' input_file -n 使用安静(silent)模式(想不通为什么不是-s

Linux文本处理工具之sed

概念: sed是一种在线编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓存区中,称为"模式空间(pattern space)",接着用舍得命令处理缓冲区中的内容,处理完成后,把缓存区的内容输出.接着处理下一行,这样不断重复,直到文件末尾.文件内容并没有改变,除非你是用重定向存储输出.sed主要用来编辑一个活多个文件. 格式: sed [-nefri] 'command' 输入文本 常用选项: -n:使用安静(silent)模式.在一般sed的用法中,所有来自STDIN的资

文本处理工具之---sed

sed,Stream editor的缩写,功能很强大,可以进行文本替换删除打印等,与grep.awk不同的是,它侧重点在于整行的编辑: 它的工作过程是,首先将文件分成以行为单位,然后将每一行逐次的放入缓冲区(模式空间),sed将其处理完毕后发送到标准输出,处理完最后一行sed便运行结束.由于sed是对存储在缓冲区的文件进行辑,因此,sed不会修改或者损坏正在编辑的文件. sed的用法: sed [OPTION]... 'script' [input-file]... sed的选项参数比较少,主要

sed流编辑器

sed默认不编辑源文件,仅对模式空间中的数据做处理:而后,处理结束后,将模式空间中的内容打印至屏幕.sed 'AddressCommand' file...    用行,和命令一起来操作文本 Address: 1.开始行,结束行:1,100代表从第一行到第100行.$代表最后一行 2./正则表达式/:可以使用正则表达式,/^root/代表root开头的行 3./模式1/,/模式2/:代表从被模式1匹配的行开始到被模式2匹配的行结束,这中间所有的行 4.行号:指定行号 5.开始行号,+N:代表从行