美文网首页Linux -- Ubuntu程序员
Linux 三剑客实例详解「grep、sed 、awk」

Linux 三剑客实例详解「grep、sed 、awk」

作者: 七彩棉花糖18 | 来源:发表于2020-05-10 19:08 被阅读0次

    简介

    Linux 操作文本的三大利器分别是 grep、sed 、awk,简称三剑客。

    大师兄 awk:最擅长取列;二师兄 sed:最擅长取行;三师兄 grep:最擅长过滤。

    正则表达式

    正则表达式

    *** 三位师兄闪亮登场啦 ***

    大师兄 -- AWK  

    1、awk 是对文本进行格式化的工具,适合处理比较复杂的格式处理。

    2、有多个版本: 1、new awk: nawk ;2、gawk, awk

    3、awk 命令格式:

            awk [options] 'script' file1  file2, ...

            awk [options] 'PATTERN {acticon}'  file1 file2, ...

        格式说明:

            1、pattern部分决定动作语句何时触发及触发事件:BEGIN、END

            2、action 对数据进行处理,放在{}内指明:print、printf

            3、最常用的是 print,默认以空白字符分隔

                  $0 代表整行,$1 代表第 1 段,$2  代表第 2 段,以此类推,$NF 代表最后一个字段,多个字段直接用逗号隔开

                  awk '{print $1, $2}' xxx.log

                  打印操作支持拼接打印,如:awk '{print "first" $1, $2}' xxx.log

        4. options 参数:输入分隔符,默认以空白字符分隔,通过 -F 选项来执行分隔符

            awk -F '#' '{print $1,$2}'  test

    输出分隔符,默认情况下输出分隔符是空格,使用内置变量 OFS 来设定输出分隔符,需要加上 -v 选项

    awk -v OFS="-->" '{print $1,$2}' test

      5. awk 变量

          FS:输入字段分隔符,默认空白字符,一般需要加 -F

          OFS:输出字段分隔符,默认是空格,一般需要加 -v

           NF:分隔后的字段数量

           NR:当前行的行号

      6. pattern 模式:模式是条件,符合条件的行, awk 才会进行处理

         关系运算模式:awk -F '#' 'NF==5 {print $1}' test

         如果行的分段数量为5 的话,进行打印操作,其他的类似,如 NF>2,NF<4,$1==1234 等都是判断条件

          awk -F '#'  'NF>=4 && NF<=5 {print $1}' test

    二师兄 -- sed

    1、sed 是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”,接着用 sed 命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。

    2、sed 命令格式:

        sed  [options]... 'script' inputfile

    选项

    1、-n:不输出模式空间内容到屏幕,即不自动打印

    2、-e:多点编辑

    3、-f /PATH/SCRIPT_FILE:从指定文件中读取编辑脚本

    4、-r:支持使用扩展正则表达式

    5、-i:直接编辑文件

    6、-i.bak:备份文件并原处编辑

    script 地址定界

    1、不给地址:对全文进行处理

    2、单地址:

           #:指定的行; $:最后一行

          /pattern/:被此处模式所能够匹配到的每一行

    编辑命令

    1、d 删除模式空间匹配的行,并立即启用下一轮循环

    2、p 显示符合条件的行,追加到默认输出之后

    3、a [\]text1 在指定行后面追加文本,支持使用\n实现多行追加

    4、i [\]text 在行前面插入文本

    5、c [\]text 替换行为单行或多行文本

    6、w /path/somefile 保存模式匹配的行至指定文件

    7、r /path/somefile 读取指定文件的文本至模式空间中匹配到的行后

    8、= 为模式空间中的行打印行号

    9、! 模式空间中匹配行取反处理

    10、s///:查找替换,支持使用其它分隔符,s@@@,s###

    替换标记:

    1、g 行内全局替换

    2、p 显示替换成功的行

    3、w /PATH/TO/SOMEFILE 将替换成功的行保存至文件中

    实例说明:

    sed -n 2p test     打印第 2 行内容

    sed -n 2,5p test    打印第 2--5 行内容

    sed -i 's/a/v/g' test    将文件中的 a 全部替换为 v 「sed替换格式是:sed -i ‘s/要替换的内容/替换成的内容/g' 文件名」

    三师兄 -- grep

    1、grep 强大的文本搜索工具,根据模式搜索文本,并将符合模式的文本行显示出来。

    2、gerp 命令格式:

          grep 【option】 pattern 【file】

    option:

    -i:忽略字符大小写

    -n:显示匹配的行号

    -v:显示没有被匹配的行

    --color:将匹配的字符以高亮颜色标记出来

    -c:统计匹配的行数

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

    -q:静默模式,不输出任何信息

    -e:实现多个选项间的逻辑 or 关系

    -v:反转查找

    -w:匹配整个单词

    -A:after ,显示后行

    -B:before ,显示前行

    -C:context,显示前后行

    -E:相当于 egrep,即 grep -E = egrep

    实例说明:

    grep -i 'b' test  在文件 test 中查找字符 b

    grep -q 'abc' test  静默执行。不会输出任何信息,如果命令运行成功返回0,失败则返回非0值。一般用于条件测试

    grep -n 'v' test 查找包含字符 v 的行数

    grep -nv 'v' test   查找不包含字符 v 的行数

    grep -n v$ test  查找以 v 结尾的行

    grep -v 'v' test  反向查找

    grep 'ljl' -A 2 test  输出匹配结果行的后 2 行

    grep 'wooow' -B 2 test  输出匹配结果行的前 2 行

    grep 'wooow' -C 2 test   输出匹配结果行的前后 2 行

    grep -n 'abc' test1 test2 test3 或 grep -n 'abc' test*  多个文件查找匹配的结果行


                                 (#^.^#)---我是有底线的---(#^.^#)

    相关文章

      网友评论

        本文标题:Linux 三剑客实例详解「grep、sed 、awk」

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