zoukankan      html  css  js  c++  java
  • grep awk sed 三剑客

    awk 三剑客老大 过滤字符串 统计数据
    grep 三剑客老三 过滤字符串
    sed 三剑客老二 查找替换字符串

    1.grep: 过滤文件中的内容

      -v  取反
      -E  支持扩展正则 | 或者egrep    '^$|#'
      -n  显示过滤到内容的行号
      -o  查看匹配过滤过程
    
    单引号和双引号的区别 不加引号
    单引号不能解析变量
    双引号和不加引号可以解析变量过滤文件中的内容 
    
    grep '过滤的内容' 文件     # 直接跟文件过滤		
    cat 文件|grep '过滤的内容' # 过滤其他命令的输出结果	  
    
    [root@oldboyedu ~]# cat passwd
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    [root@oldboyedu ~]# cat passwd|grep root
    root:x:0:0:root:/root:/bin/bash
    

    1.1 正则 ^ 以什么什么开头的行

      . 表示任意单个字符
    
    [root@oldboyedu ~]# grep ^r passwd
    root:x:0:0:root:/root:/bin/bash
    

    $ 以什么什么结尾的行

    [root@oldboyedu ~]# grep nologin$ passwd 
    bin:x:1:1:bin:/bin:/sbin/nologin
    
    [root@oldboyedu ~]# grep '^$' /etc/selinux/config
    

    1.2 -v 对查找到的内容进行取反

    [root@oldboyedu ~]# grep -v '^$' /etc/selinux/config
    # This file controls the state of SELinux on the system.
    # SELINUX= can take one of these three values:
    #     enforcing - SELinux security policy is enforced.
    #     permissive - SELinux prints warnings instead of enforcing.
    #     disabled - No SELinux policy is loaded.
    SELINUX=disabled
    # SELINUXTYPE= can take one of three values:
    #     targeted - Targeted processes are protected,
    #     minimum - Modification of targeted policy. Only selected processes are protected. 
    #     mls - Multi Level Security protection.
    SELINUXTYPE=targeted 
    ---------------------------
    [root@oldboyedu ~]# grep root passwd 
    root:x:0:0:root:/root:/bin/bash
    [root@oldboyedu ~]# grep -v root passwd 
    bin:x:1:1:bin:/bin:/sbin/nologin
    	 
    ----------------------------
    

    1.3 扩展正则:

    [root@oldboyedu ~]# grep -v '^$' /etc/selinux/config|grep -v '#'
    SELINUX=disabled
    SELINUXTYPE=targeted 
    [root@oldboyedu ~]# grep -v '^$' /etc/selinux/config
    # This file controls the state of SELinux on the system.
    # SELINUX= can take one of these three values:
    #     enforcing - SELinux security policy is enforced.
    #     permissive - SELinux prints warnings instead of enforcing.
    #     disabled - No SELinux policy is loaded.
    SELINUX=disabled
    # SELINUXTYPE= can take one of three values:
    #     targeted - Targeted processes are protected,
    #     minimum - Modification of targeted policy. Only selected processes are protected. 
    #     mls - Multi Level Security protection.
    SELINUXTYPE=targeted 
    [root@oldboyedu ~]# grep -v '^$' /etc/selinux/config|grep -v '#'
    SELINUX=disabled
    SELINUXTYPE=targeted 
    
    		 
    [root@oldboyedu ~]# egrep -v  '^$|#' /etc/selinux/config 
    SELINUX=disabled
    SELINUXTYPE=targeted 
    

    2. awk 三剑客老大 过滤字符串 统计数据

      语法格式:
            awk '/查找的内容/' file
            cat file|awk '/查找的内容/'
    

    awk '模式{动作}' file
    只要模式没有动作 默认输出模式匹配到的内容

    2.1 awk过滤字符串

    [root@oldboyedu ~]# cat passwd |awk '/root/'
    root:x:0:0:root:/root:/bin/bash
    [root@oldboyedu ~]# cat passwd |awk '/^ro/'
    root:x:0:0:root:/root:/bin/bash
    
    可以按行和列进行过滤文件内容
    先过滤出文件的第二列
    表达式:
          == 等于
          != 不等于
          >
          <
          >=
          <=
    			  
    [root@oldboyedu ~]# awk 'NR==2' passwd 
    bin:x:1:1:bin:/bin:/sbin/nologin
    		
    
    [root@oldboyedu ~]# awk 'NR<2' passwd 
    root:x:0:0:root:/root:/bin/bash
    [root@oldboyedu ~]# awk 'NR<5' passwd 
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    [root@oldboyedu ~]# awk 'NR>5' passwd 
    [root@oldboyedu ~]# awk 'NR>=5' passwd 
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    [root@oldboyedu ~]# awk 'NR<=5' passwd 
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    

    2.2 并且&&

    [root@oldboyedu ~]# # 查找行大于2并且小于5的
    [root@oldboyedu ~]# awk 'NR>2&&NR<5' passwd 
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    

    2.3 或者||

    [root@oldboyedu ~]# awk 'NR==2||NR>4' passwd 
    bin:x:1:1:bin:/bin:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    
      按行匹配使用过滤字符串方式 过滤时间
    
    [root@oldboyedu ~]# awk '/root/,/daemon/' passwd 
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    

    2.4 按列

    0 1 2 3 4 5 awk的内容变量
    0 表示所有的行
    awk执行方式按一行一行的执行
    		
    awk '匹配模式{动作}' file
    awk '女朋友{干啥}' file   # 如果前面没有匹配动作 则对整个文件进行操作
    		
    awk '{print }' file
    
    [root@oldboyedu ~]# awk '{print $0}' passwd 
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    [root@oldboyedu ~]# awk 'NR==1{print $0}' passwd # 找到谁干啥 加上了动作 默认动作就是print输出
    root:x:0:0:root:/root:/bin/bash
    

    2.5 awk按列查找内容 默

      认以空格和tab键分割
      1 就是第一列
      2 就是第二列
      获取变量 $1 $2
    

    2.5.1 使用-F 指定分隔符

    [root@oldboyedu ~]# awk -F: '{print $1}' passwd 
    root
    bin
    daemon
    adm
    lp
    
    [root@oldboyedu ~]# awk -F: '/root/' passwd 
    root:x:0:0:root:/root:/bin/bash
    [root@oldboyedu ~]# awk -F: '/root/{print $1}' passwd 
    root
    

    2.5.2 wc 统计数量

      -l 统计行号 
      -L 统计文件中最长的行的长度
    
    [root@oldboyedu ~]# awk -F: ' $3>0 && $3<1000' /etc/passwd|wc -l
    22
    [root@oldboyedu ~]# awk -F: '$3==0' /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    [root@oldboyedu ~]# awk -F: '$3==0' /etc/passwd|wc -l
    1
    [root@oldboyedu ~]# awk -F: '$3>=1000' /etc/passwd|wc -l
    3
    

    2.5.3 sort 排序 默认按照首列字母或数字进行升序排序

      -r  逆序排序
    
    [root@oldboyedu ~]# seq 10|sort 
    1
    10
    2
    3
    4
    5
    6
    7
    8
    9
    
    [root@oldboyedu ~]# seq 10|sort -n
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    [root@oldboyedu ~]# seq 10|sort -rn
    10
    9
    8
    7
    6
    5
    4
    3
    2
    1
    

    2.5.4 uniq -c 统计字符串出现的次数

    [root@oldboyedu ~]# cat test.txt|sort 
    alex
    alex
    lidao
    lidao
    oldboy
    oldboy
    oldboy
    test
    [root@oldboyedu ~]# cat test.txt|sort |unqi -c
    -bash: unqi: command not found
    [root@oldboyedu ~]# cat test.txt|sort |uniq -c
    2 alex
    2 lidao
    3 oldboy
    1 test
    [root@oldboyedu ~]# cat test.txt|sort |uniq -c|sort -rn
    3 oldboy
    2 lidao
    2 alex
    1 test
    [root@oldboyedu ~]# cat test.txt|sort -rnk2
    oldboy 3
    lidao 2
    alex 2
    test 1
    
    [root@oldboyedu ~]# awk -F: '{print $NF}' /etc/passwd|sort |uniq -c|sort -rn
    19 /sbin/nologin
    4 /bin/bash
    1 /sbin/shutdown
    1 /sbin/halt
    1 /bin/sync
    
    [root@oldboyedu ~]# awk -F: '{shells[$NF]++}END{for(i in shells)print i,shells[i]}' /etc/passwd
    /bin/sync 1
    /bin/bash 4
    /sbin/nologin 19
    /sbin/halt 1
    /sbin/shutdown 1
    

    3. sed 取行 过滤字符串 替换

      格式:
      sed '/过滤字符串/' file
      cat file|sed '/过滤字符串/'
      -n  取消默认输出
      -i  修改源文件
    
      sed执行过程
      一行一行的处理
      如果对当前的行 没有动作 默认输出到屏幕
      sed 增 删 改 查
    

    3.1 sed 之 查内容

    按照字符串匹配
    
    [root@oldboyedu ~]# sed -n '/root/p' passwd 
    root:x:0:0:root:/root:/bin/bash
    
    [root@oldboyedu ~]# sed -n '/^root/p' passwd 
    root:x:0:0:root:/root:/bin/bash
    [root@oldboyedu ~]# sed -n '/^ro/p' passwd 
    root:x:0:0:root:/root:/bin/bash
    [root@oldboyedu ~]# sed -n '/sh$/p' passwd 
    root:x:0:0:root:/root:/bin/bash
    
    [root@oldboyedu ~]# sed -n '/root/,/adm/p' passwd 
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    
    [root@oldboyedu ~]# sed -n '3p' passwd 
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    [root@oldboyedu ~]# sed -n '2p' passwd 
    bin:x:1:1:bin:/bin:/sbin/nologin
    [root@oldboyedu ~]# sed -n '1p' passwd 
    root:x:0:0:root:/root:/bin/bash
    
    
    [root@oldboyedu ~]# sed -n '1,3p' passwd 
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    
    
    [root@oldboyedu ~]# sed -n '$p' passwd 		# 最后一列
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    

    3.2 sed之增加内容

    a 在n行后面追加新的内容
    
    [root@oldboyedu ~]# cat test.txt
    lidao 2
    alex 2
    oldboy 3
    test 1
    [root@oldboyedu ~]# sed '2a oldboy111' test.txt
    lidao 2
    alex 2
    oldboy111
    oldboy 3
    test 1
    

    3.3 i 在当前行插入新的内容

    [root@oldboyedu ~]# sed '2i oldboy111' test.txt
    lidao 2
    oldboy111
    alex 2
    oldboy 3
    test 1
    

    3.4c 替换当前整行的内容

    [root@oldboyedu ~]# sed '2c oldboy111' test.txt
    lidao 2
    oldboy111
    oldboy 3
    test 1
    
    			
    [root@oldboyedu ~]# sed -i '7c SELINUX=disabled' /etc/selinux/config
    

    3.5 w 保存当前的内容至文件 没啥用

    [root@oldboyedu ~]# sed '1,3w newfile.txt' test.txt
    lidao 2
    alex 2
    oldboy 3
    test 1
    

    3.6 sed之删除

      格式:
      sed  '3d' file
    
    [root@oldboyedu ~]# sed  '3d' test.txt
    lidao 2
    alex 2
    test 1
    [root@oldboyedu ~]# sed  '1,3d' test.txt
    test 1
    
    [root@oldboyedu ~]# sed  '/root/d' passwd 
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    

    3.7 sed替换

      sed 's#替换谁#替换成什么#g'
      sed 's///g'
      sed 's@@@g'
      s   替换标志
      g 全局替换
    
    [root@oldboyedu ~]# sed 's#root#oldboy#g' passwd 
    oldboy:x:0:0:oldboy:/oldboy:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    oldboy:x:oldboy:var/var:sbin/login
    
    [root@oldboyedu ~]# sed 's#200#201#g' /etc/sysconfig/network-scripts/ifcfg-eth0
    TYPE=Ethernet
    BOOTPROTO=none
    NAME=eth0
    DEVICE=eth0
    ONBOOT=yes
    IPADDR=10.0.0.201
    PREFIX=24
    GATEWAY=10.0.0.254
    
    [root@oldboyedu ~]# sed 's#[:/0-9x]# #g' /etc/passwd|xargs -n1|sort |uniq -c|sort -rn|head
    25 sbin
    19 nologin
    8 bin
    7 var
    4 root
    4 oldboy
    4 bash
    3 sync
    3 spool
    3 shutdown
    
    [root@oldboyedu ~]# sed 's#[:/0-9]# #g' /etc/passwd|xargs -n1|awk '{count[$1]++}END{for(i in count) print i,count[i]}'|awk '{print $2,$1}'|sort -rn|head|grep -v x
    25 sbin
    19 nologin
    8 bin
    7 var
    4 root
    4 oldboy
    4 bash
    3 sync
    3 spool
    
  • 相关阅读:
    yocto添加层简介
    ARM Linux 3.x的设备树(Device Tree)
    Linux device tree 简要笔记
    git 分支( branch ) 的基本使用
    Git 常用命令速查表(三)
    Git 常用命令详解(二)
    CentOS Linux安装python3
    R语言统计学习-1简介
    cnblog中添加数学公式支持
    我们数学中常用的自然常数e代表什么?看完长知识了!
  • 原文地址:https://www.cnblogs.com/hsqKTm/p/13953845.html
Copyright © 2011-2022 走看看