一、grep —— 文本搜索工具


格式:grep [OPTIONS] PATTERN [FILE...]

OPTIONS:

    -i:忽略大小写

    --color:显示匹配字符高亮颜色

    -v:取反

    -o:只显示被匹配到的字符串

    -c:只显示匹配结果行数

    -n:显示匹配结果的同时在前面显示在该文件里对应的行数

    -E:使用扩展正则表达式

    -A 行数:显示匹配行数和匹配行数的后两行

    -B 行数:显示匹配行数和匹配行数的前两行

    -C 行数:显示匹配行数和匹配行数的前后两行


正则表达式:

    元字符:

        .:表示匹配任意单个字符

        []:匹配指定范围内的任意单个字符

        [^]:匹配指定范围外的任意单个字符

    字符集合:

        [:space:]:空白字符

        [:punct:]:标点符号

        [:lower:]:小写字母

        [:upper:]:大写字母

        [:alpha:]:大小写字母

        [:digit:]:数字

        [:alnum:]:数字和大小写字母

    匹配次数:

        *:匹配其前面的字符任意(0次或多次)

        .*:任意长度的任意字符

        \?:匹配其前面的字符1次或0次

        \{m,n\}:匹配其前面的字符至少m次,最多n次


    位置锚定:

        ^:锚定行首,此字符后面的任意内容必须出现在行首

        $:锚定行尾,此字符前面的任意内容必须出现在行尾

        ^$:空白行


    单词锚定:

        \<:其后面的任意字符必须作为单词的首部出现

        \>:其前面的任意字符必须作为单词的尾部出现


        \(\):分组

            example:\(ab\)*:可以匹配任意个ab

        后向引用:

            \1:引用第一个左括号以及与之对应的右括号所包含的所有内容(前面匹配到什么,后面就引用什么)

            \2:引用第二个左括号

            \3:引用第三个左括号

            ...

            example:从/etc/inittab文件中找出包含0-9后面跟任意字符串以0-9结尾的行(\1引用[0-9]);

                grep '\([0-9]\).*\1$' /etc/inittab


扩展正则表达式:grep -E 或 egrep

    字符匹配:

        .

        [ ]

        [^]


    次数匹配:

        *:匹配其前面的字符任意(0次或多次)

        ?:匹配其前面的字符1次或0次

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

        {m,n}:匹配其前面的字符至少m次,最多n次


    位置锚定:

        ^

        $

        \<

        \>


    分组:()

        \1,\2,\3,...


    |:或

        example:A|abc,匹配A或者abc



二、sed —— Stream EDitorsed(流编辑器)


格式:sed [OPTIONS] 'AddressCommand' file ...

    OPTIONS:

        -n:静默模式,不再默认显示模式空间中的内容

        -i:直接修改原文件

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

        -f file:指定文件脚本

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

    

    Address:

    1、StartLine,EndLine

        比如1,100

        $:最后一行

        $-1:倒数第二行

    2、/RegExp/

        /^root/——>以root开头的行

    3、/pattern1/,/pattern2/

        第一次被pattern1匹配到的行开始,到第一次被pattern2匹配到的行结束,这中间的所有行

    4、LineNumber

        指定的行

    5、StartLine,+N

        从StartLine开始,向后的N行


    Command:

        d:删除符合条件的行

        p:显示符合条件的行

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

        example:sed '/^\//a \# hello\n# test' /etc/fstab——>在/开头的行后添加hello和test两行

            \n:换行

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

        r file:将指定的文件跟内容添加到符合条件的行处

            example:sed '2r /etc/issue' /etc/fstab——>将/etc/issue的内容添加到/etc/fstab文件的第二行后

        w file:将指定范围内的行另存到指定的文件中

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

            加修饰符:

                g:全局替换

                i:忽略大小写

            &:引用模式匹配到的整个字符串

                example:

                    sed 's/l..e/&r/g' file——>把匹配到的用&引用到后面

                    sed 's/\(l..e\)/\1r/g' file

                    sed 's/l\(..e\)/L\1/g' file