美文网首页
Linux“三剑客”-awk、sed、grep基础用法

Linux“三剑客”-awk、sed、grep基础用法

作者: 王康健_0124 | 来源:发表于2019-04-15 18:27 被阅读0次

    grep 、sed、awk被称为linux中的"三剑客"。

    grep 更适合单纯的查找或匹配文本
    sed 更适合编辑匹配到的文本
    awk 更适合格式化文本,对文本进行较复杂格式处理

    重要:awk 、sed 、grep查找文件中包含字符的行
    awk '{if($0~"listAuths") print}' xxx.log 抽出包含listAuths的行内容
    sed -n -e '/listAuths/p' test3.txt 抽出包含listAuths的行内容
    grep -n 'listAuths' test3.txt 抽出包含listAuths的行内容
    find /root/ -name "te*txt" | xargs grep -in "listAuths" 寻找包含listAuths字符串文件名:te开头txt结尾的文件

    awk其实是一门编程语言,它支持条件判断、数组、循环等功能。所以,我们也可以把awk理解成一个脚本语言解释器。

    awk做打印file内容

    //打印文本中内容
    [root@wangkjlinux ~]# echo ddd > testawk
    [root@wangkjlinux ~]# awk '{print}' testawk 
    ddd
    

    awk打印列、多列
    awk '{print $X}' file 要打印每行的第X列

    //打印第二列
    [root@wangkjlinux ~]# echo 1111 222 > testawk2
    [root@wangkjlinux ~]# awk '{print $2}' testawk2 
    222
    打印第一列和第二列
    [root@wangkjlinux ~]# awk '{print $1,$2}' testawk2
    1111 222
    

    筛选展现列or加上自己描述一起展现

    awk做运算
    两个列做个减法就好

    awk -F
    awk -F ':',以冒号为分隔符,把输出的行分隔,默认是空行

    awk -F":" '{print $1}'  /etc/passwd
    awk -F":" '{print $1 $3}'  /etc/passwd                       //$1与$3相连输出,不分隔
    awk -F":" '{print $1,$3}'  /etc/passwd                       //多了一个逗号,$1与$3使用空格分隔
    awk -F":" '{print $1 " " $3}'  /etc/passwd                  //$1与$3之间手动添加空格分隔
    awk -F":" '{print "Username:" $1 "\t\t Uid:" $3 }' /etc/passwd       //自定义输出  
    awk -F: '{print NF}' /etc/passwd                                //显示每行有多少字段
    awk -F: '{print $NF}' /etc/passwd                              //将每行第NF个字段的值打印出来
    awk -F: 'NF==4 {print }' /etc/passwd                       //显示只有4个字段的行
    awk -F: 'NF>2{print $0}' /etc/passwd                       //显示每行字段数量大于2的行
    awk '{print NR,$0}' /etc/passwd                                 //输出每行的行号
    awk -F: '{print NR,NF,$NF,"\t",$0}' /etc/passwd      //依次打印行号,字段数,最后字段值,制表符,每行内容
    awk -F: 'NR==5{print}'  /etc/passwd                         //显示第5行
    awk -F: 'NR==5 || NR==6{print}'  /etc/passwd       //显示第5行和第6行
    route -n|awk 'NR!=1{print}'                                       //不显示第一行
    

    awk -F'' OFS=',' 输出的格式以X做分隔

    [root@wangkjlinux ~]# awk '{print}' testawk2
    1111 222
    [root@wangkjlinux ~]# awk '{print $1,$2 "\n33333,444444"}' OFS=',' testawk2 > testawk3
    [root@wangkjlinux ~]# cat testawk3
    1111,222
    33333,444444
    
    sed 的使用
    • 打印具体行数内容
    [root@wangkjlinux ~]# cat testawk3
    1111,222
    33333,44444
    111124,33333,qrrr
    123we,ert4,123
    1112222
    [root@wangkjlinux ~]# sed -n '2p' testawk3
    33333,44444
    [root@wangkjlinux ~]# sed -n '2,4p' testawk3
    33333,44444
    111124,33333,qrrr
    123we,ert4,123
    
    
    • 显示包含"1111"的行到包含"qrrr"的行之间的行
      sed -n '/1111/,/qrrr/p' testawk3

    • 打印1-4行,并显示行号
      sed -n -e '1,4p' testawk3

    • sed 替换部分字段输出
      sed 's/aa/AA/' test3.txt

    grep

    1基础正则表达式
    grep 工具,以前介绍过。
    grep -[acinv] '搜索内容串' filename
    -a 以文本文件方式搜索
    -c 计算找到的符合行的次数
    -i 忽略大小写
    -n 顺便输出行号
    -v 反向选择,即找 没有搜索字符串的行
    其中搜索串可以是正则表达式! grep -n '[0-9]' xxx.txt

    2 利 用[]搜索集合字符
    [] 表示其中的某一个字符 ,例如[ade] 表示a或d或e
    woody@xiaoc:~/tmp$ grep -n 't[ae]st' regular_express.txt
    8:I can't finish the test.
    9:Oh! the soup taste good

    收搜包含xxx的文件,并且文件中包含aa字符串
    find /root/ -name "te*txt" | xargs grep -in "aa"

    相关文章

      网友评论

          本文标题:Linux“三剑客”-awk、sed、grep基础用法

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