美文网首页
2018-09-22 sed 命令详解

2018-09-22 sed 命令详解

作者: 凤凰_0949 | 来源:发表于2018-09-23 15:22 被阅读0次

    lunixs三大基本文本处理工具:grep sed awk

    字符处理用法均涉及正则表达式,我们先学习正则

    REGEXP: regular expression

    pattern:

    正则表达式分为2类:

    basic REGEXP:基本

    Extended REGEXP:扩展

    基本正则表达式:

    扩展的正则表达式:

    字符匹配:

    ·:任意单个字符

    ?:其前字符0次或1次

    +:匹配其前字符至少1次

    {m,n}:不用加反斜线,

    分组:(),\1,\2,\3……

    或者

    a|b :or的意思

    grep -e =egrep

    fgrep:fast 快速搜索,不支持正则表达式

    sed基本用法:

    Stream Editor

        行编辑器:逐行进行(全屏编辑器:vi)

    sed每次把一行读取到模式空间,处理文本后输出到屏幕,sed对原文件不做任何处理,仅对模式空间中的文件做处理。

    sed:模式空间

    sed  'addressCommand'  file……

    对这个文件中符合地址的行执行该命令

    Address:

        1.StartLine,EndLine:1,100

        $:最后一行

        $-1:倒数第二行

        2./RegExp/ :/^root/

        3./pattern1/,/pattern2/ :第一次被模式1匹配到的行开始到第一次被模式2匹配到的行结束。

        4.LineNumber指定的行

        5.StartLine,+N:从startLine行开始,向后的N行,一共是N+1行。

    command:

        d:删除符合条件的行

        p:显示符合条件的行(print)

        -n:静默模式     

    不显示模式空间的内容,只显示命令相关内容

        a \string:在指定的行后面追加新行,内容为"string"

        i \string:在指定的内容前面添加新行,内容为string

        r  filename:将指定文件的内容添加至符合条件的行数,$r,用于合并文件。

        w:将地址指定的范围内的内容另存至指定文件中

        s/pattern/string/修饰符:查找并替换,将每一行中pattern替换成string,默认只替换每行第一次遇到的模式匹配到的string

            加修饰符

                g:全局替换

                i:忽略字符大小写

            s///:s###,s@@@

            l..e:

            &:引用模式匹配整个串

            也支持后向引用

            -i:直接修改原文件

            -e script  -e  script:可以同时执行多个脚本

            -f /PATH/TO/SED_SCRIPT:

            -r:表示使用扩展正则表达式

    练习:将history中的空格删除

            history | sed ‘s#[[:space:]]##g'

    习题:1.删除/etc/grub.conf文件中行首的空白符

    sed  -r  's@^ [[:space:]]+@@g'  /etc/grub.conf

      -r:表示使用扩展正则表达式

      +:匹配其前字符至少1次

       g:全局替换

    2.替换/etc/inittab文件中“id:3:initdefault:”一行中的数字为5;

    sed  's@\(id:\)[0-9]\(:initdefault:\)@\15\2@g'  /etc/inittab

        \(\) :分组

        \1:第一个左括号以及与之对应得右括号包含得所有内容

        \2:第二个左括号以及与之对应得右括号包含得所有内容

        [0-9]替换成5

    3.删除/etc/inittab文件中的空白行;

        sed   '/^$/d'   etc/inittab

         d:删除符合条件的行

        ^$:空白行

    4.删除/etc/inittab文件中开通的#号

        sed  's@^#@@g'   etc/inittab

        ^:锚定行首,这个字符后面得字符串必须出现在行首

    5.删除某文件中开头的#号及后面的空白字符,但要求#号后面必须有空白字符;

        sed  -r  's@#[[:space:]]+@@g'   /etc/inittab

         -r:表示使用扩展正则表达式

          +:匹配其前字符至少1次

    6.删除某文件中以空白字符后面跟#类的行中开头的空白字符及#

        sed -r  's@^[[:space:]]+#@@g'   /etc/inittab

    7.取出一个文件路径的目录名称;???

        echo  "/etc.rc.d" | sed -r  's@^(/.*/)[^/]+/?@\1@'

    相关文章

      网友评论

          本文标题:2018-09-22 sed 命令详解

          本文链接:https://www.haomeiwen.com/subject/ayrfoftx.html