字符处理命令(sort、uniq、cut、sed、awk、wc)

 

  字符处理命令

    排序命令:sort    选项 -t(指定分隔符) -k(指定某一列) -n(以阿拉伯数字排序) -r(逆序排列)

    ps:(默认sort以第一列排序)

    示例:按数字排序IP的访问次数

      [root@LiSong ~]# cat ip.txt
      192.168.3.1 00:0F:AF:81:19:1F
      192.168.3.2 00:0F:AF:85:6C:25
      192.168.3.3 00:0F:AF:85:70:42
      192.168.2.20 00:0F:AF:85:55:DE
      192.168.2.21 00:0F:AF:85:6C:09
      192.168.2.22 00:0F:AF:85:5C:41
      192.168.0.151 00:0F:AF:85:6C:F6
      192.168.0.152 00:0F:AF:83:1F:65
      192.168.0.153 00:0F:AF:85:70:03
      192.168.1.10 00:30:15:A2:3B:B6
      192.168.1.11 00:30:15:A3:23:B7
      192.168.1.12 00:30:15:A2:3A:A1
      192.168.1.1 00:0F:AF:81:19:1F
      192.168.2.2 00:0F:AF:85:6C:25
      192.168.3.3 00:0F:AF:85:70:42
      192.168.2.20 00:0F:AF:85:55:DE
      192.168.1.21 00:0F:AF:85:6C:09
      192.168.2.22 00:0F:AF:85:5C:41
      192.168.0.151 00:0F:AF:85:6C:F6
      192.168.1.152 00:0F:AF:83:1F:65
      192.168.0.153 00:0F:AF:85:70:03
      192.168.3.10 00:30:15:A2:3B:B6
      192.168.1.11 00:30:15:A3:23:B7
      192.168.3.12 00:30:15:A2:3A:A1

    答:[root@LiSong ~]# sort -t "." -k3.1,3.1 -k4.1,4.3 -n ip.txt
      192.168.0.151 00:0F:AF:85:6C:F6
      192.168.0.151 00:0F:AF:85:6C:F6
      192.168.0.152 00:0F:AF:83:1F:65
      192.168.0.153 00:0F:AF:85:70:03
      192.168.0.153 00:0F:AF:85:70:03
      192.168.1.1 00:0F:AF:81:19:1F
      192.168.1.10 00:30:15:A2:3B:B6
      192.168.1.11 00:30:15:A3:23:B7
      192.168.1.11 00:30:15:A3:23:B7
      192.168.1.12 00:30:15:A2:3A:A1
      192.168.1.21 00:0F:AF:85:6C:09
      192.168.1.152 00:0F:AF:83:1F:65
      192.168.2.2 00:0F:AF:85:6C:25
      192.168.2.20 00:0F:AF:85:55:DE
      192.168.2.20 00:0F:AF:85:55:DE
      192.168.2.21 00:0F:AF:85:6C:09
      192.168.2.22 00:0F:AF:85:5C:41
      192.168.2.22 00:0F:AF:85:5C:41
      192.168.3.1 00:0F:AF:81:19:1F
      192.168.3.2 00:0F:AF:85:6C:25
      192.168.3.3 00:0F:AF:85:70:42
      192.168.3.3 00:0F:AF:85:70:42
      192.168.3.10 00:30:15:A2:3B:B6
      192.168.3.12 00:30:15:A2:3A:A1

 

    去重命令:uniq    选项 -c(统计出现次数)

     [root@LiSong ~]# cat yunxi.txt
     abc
     123
     abc
     123

     答:[root@LiSong ~]# sort yunxi.txt | uniq -c
           2 123
           2 abc

     ps:(必须先排序才能统计次数 | 的意思是将前者命令的输出交给后者命令的输入)

     忽略:(awk '{print $1}' docs.xuliangwei.log | sort | uniq -c | sort -nr | head -10)

        495 114.92.159.100
           446 123.207.173.97
        347 139.226.173.12
           159 139.226.173.216
           101 139.226.172.91
            75 139.226.172.150
            54 45.124.44.152
            54 101.224.238.107
            52 47.101.50.252
            41 101.81.200.114

 

    字符截取命令cut   选项 -d(指定分隔符) -f(指定某一列)

          awk   选项 -F(指定分隔符)

          sed    选项 -i(修改文件) -n(取消打印默认输出) -r(支持正则表达式)

    示例:echo "Im lisong, is QQ 67204889" >file.txt  取出lisong以及67204889

    答:

    # cut -d " " -f 2,5 file.txt | awk -F "," '{print $1,$2}'
    # awk '{print $2,$5}' file.txt |awk -F "," '{print $1,$2}'
    # awk -F '[, ]' '{print $2,$6}' file.txt
    # awk -F '[, ]+' '{print $2,$5}' file.txt    #参考
    # cut -d " " -f 2,5 file.txt|sed 's#,##g'

    取列:cut awk
    替换:sed
    取行:grep awk

    #实现上述题目几种思路
    # cut -d " " -f2,5 file.txt
    # cut -d " " -f2,5 file.txt |sed 's#,##g'
    # sed 's#,# #g' file.txt | awk -F " " '{print $2 " " $5}'
    # awk  '{print $2,$5}' file.txt |awk -F ',' '{print $1,$2}'
    # awk -F  "[, ]" '{print $2,$6}' file.txt
    # awk -F '[, ]+' '{print $2,$5}' file.txt 
 
    过滤,取行
    # awk '/root/' /etc/passwd
    # awk '/^root/' /etc/passwd

 

    统计行号:wc  选项 -c(显示文件字节) -l(显示文件行数)  -w(显示文件单词数)

    # wc -l /etc/passwd      #统计/etc/passwd文件有多少行

 

    #显示某文件的最后一行并显示行号 -n(显示行号)
    # grep -n "." /etc/services  | tail -1
    # cat -n /etc/services  | tail -1

 

    习题:过滤出/etc/passwd以nologin结尾的.并统计有多少行
        # grep "nologin$" /etc/passwd | wc -l

    习题:使用ifconfig获取当前的IP地址,使用sed\awk\grep取当前服务器的ens32的IP地址

        #ifconfig ens32 | awk 'NR==2 {print $2}'

        # ifconfig ens32 | grep "inet "|cut -d " " -f 10

        # ifconfig ens32 | grep "inet "|awk '{print $2}'

        # ifconfig ens32 | awk '/inet /'|awk '{print $2}'

 awk取行
# ifconfig ens32|awk 'NR==2 {print $2}'  #NR代表的是行号,NR==2 代表要取输出结果的第二行
 sed取行
# ifconfig ens32|sed -n '2p'|awk '{print $2}'

 

习题:将该/etc/sysconfig/selinux文件中的SELINUX=enforcing替换为SELINUX=disabled
     1.提取需要替换的内容
     2.模拟演练
     3.真的修改
# sed 's#^SELINUX=.*#SELINUX=disabled#g' /etc/sysconfig/selinux
# sed -i 's#^SELINUX=.*#SELINUX=disabled#g' /etc/sysconfig/selinux -i(修改文件)

# awk '/^root/' /etc/passwd|awk -F ":" '{print $7":"$2":"$3":"$4":"$5":"$6":"$1}'
# awk -F ":" '/^root/ {print $7":"$2":"$3":"$4":"$5":"$6":"$1}' /etc/passwd

# sed -n '1p' /etc/passwd|sed -r 's#(root)(.*)(/bin/bash)#\3\2\1#g'

转载于:https://www.cnblogs.com/yunxi2518/p/10678910.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值