zoukankan      html  css  js  c++  java
  • 第十一章 常用文字字符串处理命令

    一、sort       #排序 将不相同的行进行排序在一起 默认是根据第一列进行排序 默认是以空白字符为分割符 

              #默认以字母进行排序


    选项:

    -k          #指定哪一列为分隔符

    -n         #以数值大小的方式进行排序

    -r          #倒叙排序

    -t         #指定分割符

    cat>sort.txt<<EOF
    b 5
    c 3
    a 11
    f 2
    d 9
    EOF

     

    [root@jindada ~]# cat sort.txt
    b 5
    c 3
    a 11
    f 2
    d 9
    [root@jindada ~]# sort sort.txt
    a 11
    b 5
    c 3
    d 9
    f 2

    [root@jindada ~]# sort -k2 sort.txt
    a 11
    f 2
    c 3
    b 5
    d 9
    [root@jindada ~]# sort -nk2 sort.txt
    f 2
    c 3
    b 5
    d 9
    a 11

    [root@jindada ~]# sort -rnk2 sort.txt
    a 11
    d 9
    b 5
    c 3
    f 2


    [root@jindada ~]# cp /etc/passwd ./
    [root@jindada ~]# cat 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
    sync:x:5:0:sync:/sbin:/bin/sync
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    halt:x:7:0:halt:/sbin:/sbin/halt
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    operator:x:11:0:operator:/root:/sbin/nologin
    games:x:12:100:games:/usr/games:/sbin/nologin
    ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    nobody:x:99:99:Nobody:/:/sbin/nologin
    systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
    dbus:x:81:81:System message bus:/:/sbin/nologin
    polkitd:x:999:998:User for polkitd:/:/sbin/nologin
    sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    postfix:x:89:89::/var/spool/postfix:/sbin/nologin


    [root@jindada ~]# sort -t ":" -nk3 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
    sync:x:5:0:sync:/sbin:/bin/sync
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    halt:x:7:0:halt:/sbin:/sbin/halt
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    operator:x:11:0:operator:/root:/sbin/nologin
    games:x:12:100:games:/usr/games:/sbin/nologin
    ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    dbus:x:81:81:System message bus:/:/sbin/nologin
    postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    nobody:x:99:99:Nobody:/:/sbin/nologin
    systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
    polkitd:x:999:998:User for polkitd:/:/sbin/nologin


    cat>file.txt<<EOF
    123
    abc
    123
    edf
    456
    123
    abc
    EOF


    [root@jindada ~]# cat file.txt
    123
    abc
    123
    edf
    456
    123
    abc

    [root@jindada ~]# sort file.txt
    123
    123
    123
    456
    abc
    abc
    edf

    二、uniq          #去重 去除重复的行 只能去除相同相邻的行 统计 将重复的行的次数统计出来 跟sort结合使用


    |              #管道 将前面命令的执行结果交给后面的命令继续执行 操作的是数据


    选项:

    -c            #统计重复的行的次数

    [root@jindada ~]# sort file.txt
    123
    123
    123
    456
    abc
    abc
    edf

    [root@jindada ~]# sort file.txt | uniq
    123
    456
    abc
    edf

    [root@jindada ~]# sort file.txt | uniq -c
    3 123
    1 456
    2 abc
    1 edf


    [root@jindada ~]# sort file.txt | uniq -c | sort
    1 456
    1 edf
    2 abc
    3 123
    [root@jindada ~]# sort file.txt | uniq -c | sort -n
    1 456
    1 edf
    2 abc
    3 123
    [root@jindada ~]# sort file.txt | uniq -c | sort -rn
    3 123
    2 abc
    1 edf
    1 456

    三、cut          #取列 awk命令的小弟 默认的分隔符为tab键

    选项:

    -d            #指定分隔符

    -f            #取出指定的列

    -c            #取出指定的字符 按照行进行处理的

    [root@jindada ~]# echo "root:x:0:0:root:/root:/bin/bash" >test.txt
    [root@jindada ~]# cat test.txt
    root:x:0:0:root:/root:/bin/bash

    #取出第七列
    [root@jindada ~]# cut -d ":" -f7 test.txt
    /bin/bash

    #取出第一列和第七列
    [root@jindada ~]# cut -d ":" -f1,7 test.txt
    root:/bin/bash

    #取出第五列到第七列
    [root@jindada ~]# cut -d ":" -f5-7 test.txt
    root:/root:/bin/bash

    [root@jindada ~]# cut -d ":" -f7 passwd
    /bin/bash
    /sbin/nologin
    /sbin/nologin
    /sbin/nologin
    /sbin/nologin
    /bin/sync
    /sbin/shutdown
    /sbin/halt
    /sbin/nologin
    /sbin/nologin
    /sbin/nologin
    /sbin/nologin
    /sbin/nologin
    /sbin/nologin
    /sbin/nologin
    /sbin/nologin
    /sbin/nologin
    /sbin/nologin
    [root@jindada ~]# cut -d ":" -f7 passwd | sort
    /bin/bash
    /bin/sync
    /sbin/halt
    /sbin/nologin
    /sbin/nologin
    /sbin/nologin
    /sbin/nologin
    /sbin/nologin
    /sbin/nologin
    /sbin/nologin
    /sbin/nologin
    /sbin/nologin
    /sbin/nologin
    /sbin/nologin
    /sbin/nologin
    /sbin/nologin
    /sbin/nologin
    /sbin/shutdown
    [root@jindada ~]# cut -d ":" -f7 passwd | sort | uniq
    /bin/bash
    /bin/sync
    /sbin/halt
    /sbin/nologin
    /sbin/shutdown
    [root@jindada ~]# cut -d ":" -f7 passwd | sort | uniq -c
    1 /bin/bash
    1 /bin/sync
    1 /sbin/halt
    14 /sbin/nologin
    1 /sbin/shutdown
    [root@jindada ~]# cut -d ":" -f7 passwd | sort | uniq -c | sort -n
    1 /bin/bash
    1 /bin/sync
    1 /sbin/halt
    1 /sbin/shutdown
    14 /sbin/nologin
    [root@jindada ~]# cut -d ":" -f7 passwd | sort | uniq -c | sort -rn
    14 /sbin/nologin
    1 /sbin/shutdown
    1 /sbin/halt
    1 /bin/sync
    1 /bin/bash


    [root@jindada ~]# cat test.txt
    root:x:0:0:root:/root:/bin/bash
    [root@jindada ~]# cut -c 6 test.txt
    x
    [root@jindada ~]# cut -c 6 passwd
    x
    :
    n
    :
    4
    x
    o
    x
    x
    t
    #取出不同的字符
    [root@jindada ~]# cut -c 6,8 test.txt
    x0

    #取出连续的字符
    [root@jindada ~]# cut -c 1-4 test.txt
    root


    #取出系统eth0的IP地址

    [root@jindada ~]# yum install -y net-tools

    [root@jindada ~]# ifconfig eth0
    eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
    inet 10.0.0.100 netmask 255.255.255.0 broadcast 10.0.0.255
    inet6 fe80::3310:9d15:9ee4:43e8 prefixlen 64 scopeid 0x20<link>
    ether 00:0c:29:eb:ea:8d txqueuelen 1000 (Ethernet)
    RX packets 1634 bytes 464970 (454.0 KiB)
    RX errors 0 dropped 0 overruns 0 frame 0
    TX packets 1033 bytes 114568 (111.8 KiB)
    TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

    [root@jindada ~]# ifconfig eth0 | head -2
    eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
    inet 10.0.0.100 netmask 255.255.255.0 broadcast 10.0.0.255
    [root@jindada ~]# ifconfig eth0 | head -2 | tail -1
    inet 10.0.0.100 netmask 255.255.255.0 broadcast 10.0.0.255
    [root@jindada ~]# ifconfig eth0 | head -2 | tail -1 | cut -d " " -f10
    10.0.0.100

     

    [root@jindada ~]# ip a s eth0
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:eb:ea:8d brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.100/24 brd 10.0.0.255 scope global noprefixroute eth0
    valid_lft forever preferred_lft forever
    inet6 fe80::3310:9d15:9ee4:43e8/64 scope link noprefixroute
    valid_lft forever preferred_lft forever
    [root@jindada ~]# ip a s eth0 | head -3
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:eb:ea:8d brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.100/24 brd 10.0.0.255 scope global noprefixroute eth0
    [root@jindada ~]# ip a s eth0 | head -3 | tail -1
    inet 10.0.0.100/24 brd 10.0.0.255 scope global noprefixroute eth0
    [root@jindada ~]# ip a s eth0 | head -3 | tail -1 | cut -c 10-19
    10.0.0.100

     

    [root@jindada ~]# ip a s eth0 | head -3 | tail -1
    inet 10.0.0.100/24 brd 10.0.0.255 scope global noprefixroute eth0
    [root@jindada ~]# ip a s eth0 | head -3 | tail -1 | cut -d " " -f6
    10.0.0.100/24
    [root@jindada ~]# ip a s eth0 | head -3 | tail -1 | cut -d " " -f6 | cut -d "/" -f1
    10.0.0.100

    四、tr         #替换 删除 sed的小弟 只能单对单的替换

    选项:

    -d           #删除指定的字符

    语法:

    tr old new    < file


    <            #标准输入重定向


    [root@jindada ~]# cat test.txt
    root:x:0:0:root:/root:/bin/bash

    [root@jindada ~]# tr "0" "9" < test.txt
    root:x:9:9:root:/root:/bin/bash

    [root@jindada ~]# tr -d "o" < test.txt
    rt:x:0:0:rt:/rt:/bin/bash
    [root@jindada ~]#


    [root@jindada ~]# ip a s eth0
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:eb:ea:8d brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.100/24 brd 10.0.0.255 scope global noprefixroute eth0
    valid_lft forever preferred_lft forever
    inet6 fe80::3310:9d15:9ee4:43e8/64 scope link noprefixroute
    valid_lft forever preferred_lft forever
    [root@jindada ~]# ip a s eth0 | head -3 | tail -1
    inet 10.0.0.100/24 brd 10.0.0.255 scope global noprefixroute eth0
    [root@jindada ~]# ip a s eth0 | head -3 | tail -1 | tr '/' ' '
    inet 10.0.0.100 24 brd 10.0.0.255 scope global noprefixroute eth0
    [root@jindada ~]# ip a s eth0 | head -3 | tail -1 | tr '/' ' ' | cut -d " " -f6
    10.0.0.100

    五、wc          #统计 行数 字节数 列数 行的长度

    选项:

    -l              #统计行数

    -w              #统计列数,默认以空白字符为分隔符

    -c              #统计字节数

    -L              #统计文件中最长的行的长度


    [root@jindada ~]# wc passwd
    18 26 798 passwd
    [root@jindada ~]# wc -l passwd
    18 passwd
    [root@jindada ~]# cat /etc/hosts
    127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
    [root@jindada ~]# wc /etc/hosts
    2 10 158 /etc/hosts
    [root@jindada ~]# wc -w /etc/hosts
    10 /etc/hosts
    [root@jindada ~]# ll passwd
    -rw-r--r--. 1 root root 798 Jul 13 16:49 passwd
    [root@jindada ~]# ll /etc/hosts
    -rw-r--r--. 1 root root 158 Jun 7 2013 /etc/hosts
    [root@jindada ~]# wc -c /etc/hosts
    158 /etc/hosts
    [root@jindada ~]# wc -c passwd
    798 passwd
    [root@jindada ~]#


    [root@jindada ~]# wc -L passwd
    68 passwd
    [root@jindada ~]# cat /etc/hosts
    127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
    [root@jindada ~]# wc -L /etc/hosts
    78 /etc/hosts


    [root@jindada ~]# name=ewuighrtuighwiorteugh
    [root@jindada ~]# echo $name
    ewuighrtuighwiorteugh
    [root@jindada ~]# echo $name | wc -L
    21

  • 相关阅读:
    18 | 为什么这些SQL语句逻辑相同,性能却差异巨大?
    17 | 如何正确地显示随机消息?
    16 | “order by”是怎么工作的?
    15 | 答疑文章(一):日志和索引相关问题
    14 | count(*)这么慢,我该怎么办?
    13 | 为什么表数据删掉一半,表文件大小不变?
    12 | 为什么我的MySQL会“抖”一下?
    11 | 怎么给字符串字段加索引?
    10 | MySQL为什么有时候会选错索引?
    2016 Multi-University Training Contest 4
  • 原文地址:https://www.cnblogs.com/jhno1/p/13295600.html
Copyright © 2011-2022 走看看