zoukankan      html  css  js  c++  java
  • linux sed命令

    sed简介

      sed是一个流(stream)编辑器,每次读取文本中的一行,放到内存的缓冲区(pattern space),然后使用sed命令处理pattern space中的内容,处理完成后,默认输出至屏幕(stdout)。随后处理下一行数据。

    sed工作特性

    •   不直接编辑源文件,拷贝一份至pattern space,在内存中处理pattern space 中的内容。
    •   处理结果默认输出至stdout。

         

        注意:实际上sed还有一个holdspace,上图只是其基本的流程

    sed 使用方法

      sed  [OPTION]  'script'  [input-file]……

        OPTION:

          -n:slient静默模式,一般情况下,来自标准输入(stdin)的数据,默认输出至屏幕(stdout)。但是加上-n后,则只有经过sed 特殊处理的内容才会被列出来。、

          -e script:多点编辑,对一行数据进行多个编辑命令。

          -f /PATH/TO/SED_SCRIPT_FILE:使用脚本处理数据。脚本中每一行为一个编辑命令。

          -r:支持扩展的正则表达式。

          -i[SUFFIX]:直接编辑原文件。

        script:script中内容是‘地址定界编辑命令’ (地址定界后直接跟编辑命令)。

          地址定界:空地址、单地址、范围地址、地址步进

            空地址:不给地址默认为全文处理。

            单地址:

              #:指定某一行。

              /pattern/:模式匹配行。

            范围地址:

              ns,nd:从ns行到nd行。

              ns,/pattern/:从ns行到pattern匹配到的行。

              ns,+#:从ns行开始偏移#行。

              /pattern1/,/pattern2/:从pat1到pat2匹配的行。

            地址步进:~

              1~2:从第一行开始,步进2,即所有奇数行。

          编辑命令:

            d:删除模式空间中的内容——删除后输出模式空间内容至默认输出

              

               使用-n选项后不会输出任何内容。因为被sed处理过的内容已经被删除,-n又不输出没有被处理过的内容。

              

            p:打印模式空间中的内容。通常 p 会与参数 sed -n 一起运行,只输出sed处理过的内容

                打印了两次3,4行的内容,第一次输出的“#  /etc/fstab”是默认输出,第二次输出的“#  /etc/fstab”,是sed读取文件内容到第三行是会被p命令

              (打印)处理。所以会有两行。

              

                使用-n,屏蔽了默认输出,至输出被sed处理过的内容。

              

             

            a ext:追加,在匹配行后追加一行新的数据为 ext的行。可使用 实现追加多行。

                第一行为空行,新加一行在第二行。

              

                使用 实现多行插入。

              

            i  ext:插入,在匹配的行前插入一行新的数据为 ext的行。可使用 实现追加多行。

                第一行为空行,新加的一行在空行前插入。

              

                使用 实现多行插入。

                

            c ext:把匹配到的行替换成为 est的内容。

                将开头为#的行替换成为null。

              

              

                 使用-e参数来对同一数据进行多次处理。

              

            w /PATH/TO/SOMEFILE:保存模式空间中的内容至指定文件中

                首先删除以#开头的行然后将剩余内容输出至一个文件

                   

             r /PATH/FROM/SOMEFILE:读取指定文件内容至当前文件被匹配到的行后,以实现文件合并。

                把/etc/issue 文件内容添加到 /etc/fstab 第一行后。

              

            =:在被匹配的行的前一行插入行号

                在第1-3行插入行号。

              

            !:条件取反,!要写在模式后边编辑命令前面——地址定界!编辑命令。

                删除所有非#开头的行。

              

            s///:查找替换,分隔符可自行指定,常用的有s@@@,s###等。

              替换标记:

                g:全局替换。

                w:将替换成功的结果保存至指定文件中。

                p:显示替换成功的行。

    补充正则表达式元字符(引用于https://www.cnblogs.com/wangkangluo1/archive/2012/04/19/2456968.html)

              练习一:删除/boot/grub/grub.conf 文件中以空格开头的空白字符

                  sed ‘s@^[[:space]]+@@’  /boot/grub/grub.conf

              练习二:删除/etc/fstab文件中所有以#开头的行首的#号及#号后的所有空白字符

                  sed 's@^#[[:space]]*@@' /etc/fstab

              练习三:输出一个绝对路径给sed,取出其基目录。

                  echo "/var/log/messages" |sed 's@[^/]+$@@'

                  echo "/var/log/messages/ |sed 's@ [^/]+/?@@'

  • 相关阅读:
    多线程编程(2):线程的同步
    C#中listview实现排序
    [PLC]S7-300的数据类型
    C# 多线程编程(4):多线程与UI操作
    Thunderbird 80 column FIX 发出的邮件也需要在80列处line break
    vsftp 500 OOPS: vsftpd: refusing to run with writable anonymous root
    科普 What is YUV
    转载:网站真的可以无密码登录么?
    Ubuntu 12.04安装Microsoft lifecam studio摄像头
    Thunderbird on Ubuntu 12.04 调整邮件列表行间距
  • 原文地址:https://www.cnblogs.com/wxxjianchi/p/9138377.html
Copyright © 2011-2022 走看看