zoukankan      html  css  js  c++  java
  • linux常用命令(shell脚本常用命令)(grep、cut、sort、uniq、seq、tr、basename、dirname)

    本章命令:

    1 2 3 4 5 6
    grep cut sort uniq seq tr

    1、grep

    作用:过滤文本内容

    选项 描述
    -E :--extended--regexp 模式是扩展正则表达式(ERE)
    -i :--ignore--case 忽略大小写
    -n: --line--number 打印行号
    -o:--only--matching 只打印匹配的内容
    -c:--count 只打印每个文件匹配的行数
    -B:--before--context=NUM 打印匹配的前几行
    -A:--after--context=NUM 打印匹配的后几行
    -C:--context=NUM 打印匹配的前后几行
    --color[=WHEN] 匹配的字体颜色,别名已定义了
    -v:--invert--match 打印不匹配的行
    -e 多点操作eg:grep -e "^s" -e "s$"

    样本文件内容

    [root@ken ~]# cat test
    dlakdlad
    ad
    ad
    a
    dFSAF
    A
    F
    F
    AS
    F
    f
    sf
    as
    f
    

    实例1:打印出所有的a无论大小写 : -i选项

    ╭─root@localhost.localdomain ~  
    ╰─➤   grep -i “a” test
    dlakdlad
    ad
    ad
    a
    dFSAF
    A
    AS
    as
    

    实例2:打印出所有的a无论大小写,并且显示该字符串所在的行 : -n选项

    ╭─root@localhost.localdomain ~  
    ╰─➤   grep -i -n “a” test
    1:dlakdlad
    2:ad
    3:ad
    4:a
    5:dFSAF
    6:A
    9:AS
    13:as
    

    实例3:仅仅打印出所有匹配的字符串: -o选项

    ╭─root@localhost.localdomain ~  
    ╰─➤   grep -i -o “a” test
    a
    a
    a
    a
    a
    A
    A
    A
    a
    

    实例4:打印出匹配的字符串有多少行 -c选项

    ╭─root@localhost.localdomain ~  
    ╰─➤   grep -i -c “a” test
    8
    

    实例5:打印出字符S前面的2行 -B

    ╭─root@localhost.localdomain ~  
    ╰─➤  grep -B 2 “S” test
    ad
    a
    dFSAF
    —
    F
    F
    AS
    

    实例6:打印出字符S后面的2行 -A

    ╭─root@localhost.localdomain ~  
    ╰─➤  grep -A 2 “S” test
    dFSAF
    A
    F
    —
    AS
    F
    f
    

    实例7:打印出字符S前后2行 -C

    ╭─root@localhost.localdomain ~  
    ╰─➤   grep -C 2 “S” test
    ad
    a
    dFSAF
    A
    F
    F
    AS
    F
    f
    

    实例8:打印出不包含大小s的所有行 取反 -v

    ╭─root@localhost.localdomain ~  
    ╰─➤   grep -i -v “s” test
    dlakdlad
    ad
    ad
    a
    A
    F
    F
    F
    f
    f
    

    grep可以从文件当中直接搜索某个关键词,也可以从标准输入里面搜错

    ╭─root@localhost.localdomain ~  
    ╰─➤   grep root /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    operator:x:11:0:operator:/root:/sbin/nologin
    ╭─root@localhost.localdomain ~  
    ╰─➤   cat /etc/passwd | grep “root”
    root:x:0:0:root:/root:/bin/bash
    operator:x:11:0:operator:/root:/sbin/nologin
    

    2.cut

    -c :以字符为单位进行分割。
    -d :自定义分隔符。
    -f :与-d一起使用,指定显示哪个区域。

    实例1:获取6位随机加密数

    ╭─root@localhost.localdomain ~  
    ╰─➤  echo $RANDOM | md5sum | cut -c 1-6
    bb2788
    ╭─root@localhost.localdomain ~  
    ╰─➤   echo $RANDOM | md5sum | cut -c 1-6
    45a0e0
    

    实例2:截取指定的字符串

    ╭─root@localhost.localdomain ~  
    ╰─➤   echo “abcd” | cut -c 2
    b
    

    实例3:截取出来/etc/passwd用户名

    ╭─root@localhost.localdomain ~  
    ╰─➤   cat /etc/passwd | cut -d “:” -f 1
    root
    bin
    daemon
    adm
    lp
    sync
    shutdown
    halt
    

    实例4:截取出来/etc/passwd用户的shell类型

    ╭─root@localhost.localdomain ~  
    ╰─➤   cat /etc/passwd | cut -d “:” -f 7
    /bin/bash
    /sbin/nologin
    /sbin/nologin
    /sbin/nologin
    /sbin/nologin
    /bin/sync
    /sbin/shutdown
    

    实例5:截取出来/etc/passwd用户以及shell类型

    ╭─root@localhost.localdomain ~  
    ╰─➤  cat /etc/passwd | cut -d “:” -f 1,7
    root:/bin/bash
    bin:/sbin/nologin
    daemon:/sbin/nologin
    adm:/sbin/nologin
    lp:/sbin/nologin
    sync:/bin/sync
    shutdown:/sbin/shutdown
    halt:/sbin/halt
    

    3.sort

    -k:根据切割后的那一段进行排序
    -n 依照数值的大小排序(默认是根据字符进行排序)。
    -r 以相反的顺序来排序。
    -t<分隔字符> 指定排序时所用的栏位分隔字符。
    -u:去除重复的行(只要那个指定的字段重复,就认定是重复的行)

    演示文件

    ╭─root@localhost.localdomain ~  
    ╰─➤   cat test
    12
    23
    2
    3
    5
    

    实例1:以数字排序 -n

    ╭─root@localhost.localdomain ~  
    ╰─➤   sort test
    12
    2
    23
    3
    5
    ╭─root@localhost.localdomain ~  
    ╰─➤   sort -n test
    2
    3
    5
    12
    23
    

    实例2:降序排序

    ╭─root@localhost.localdomain ~  
    ╰─➤   sort -n -r test
    23
    12
    5
    3
    2
    

    实例3:降序排序并取出前3行

    ╭─root@localhost.localdomain ~  
    ╰─➤   sort -n -r test | head -3
    23
    12
    5
    

    演示文件

    ╭─root@localhost.localdomain ~  
    ╰─➤   cat test
    12:3
    23:4
    2:12
    3:5
    5:23
    

    实例4:以冒号为分隔符,第二列进行数字降序排序

    ╭─root@localhost.localdomain ~  
    ╰─➤   cat test | sort -t “:” -k2 -n -r
    5:23
    2:12
    3:5
    23:4
    12:3
    

    演示文本:

    ╭─root@localhost.localdomain ~  
    ╰─➤   cat test
    12:3
    12:3
    12:3
    12:3
    23:4
    2:12
    3:5
    3:5
    3:5
    3:5
    5:23
    

    实例5:显示行并去除重复行

    ╭─root@localhost.localdomain ~  
    ╰─➤   sort -u test
    12:3
    2:12
    23:4
    3:5
    5:23
    

    4. uniq

    -c:(count)在行首用数字表示该行出现了多少次
    -u:仅仅显示那些没有出现重复过的行

    演示文件

    ╭─root@localhost.localdomain ~  
    ╰─➤   cat test
    12:3
    12:3
    12:3
    12:3
    23:4
    2:12
    3:5
    3:5
    3:5
    3:5
    5:23
    

    实例1:统计每行出现的次数

    ╭─root@localhost.localdomain ~  
    ╰─➤   uniq -c test
    4 12:3
    1 23:4
    1 2:12
    4 3:5
    1 5:23
    

    实例2:演示没有出现出重复行的数量

    ╭─root@localhost.localdomain ~  
    ╰─➤   uniq -u test
    23:4
    2:12
    5:23
    

    5、seq

    实例1:

    ╭─root@localhost.localdomain ~  
    ╰─➤   seq 5
    1
    2
    3
    4
    5
    

    实例2:

    ╭─root@localhost.localdomain ~  
    ╰─➤   seq 2 5
    2
    3
    4
    5
    

    实例3:

    ╭─root@localhost.localdomain ~  
    ╰─➤   seq 2 2 10  #第一个2是起始位,第二个2是步长,第三个10是终止位
    2
    4
    6
    8
    10
    

    实例4:取出100以内所有的奇数

    ╭─root@localhost.localdomain ~  
    ╰─➤  seq 1 2 100
    1
    3
    5
    7
    9
    11
    13
    15
    17
    

    实例5:取出100以内所有的偶数

    ╭─root@localhost.localdomain ~  
    ╰─➤   seq 2 2 100
    2
    4
    6
    8
    10
    12
    14
    16
    

    6.tr命令:命令用于转换或删除文件中的字符

    -d:删除指定的字符串

    实例1:把所有的小写字母都转化为大写字母

    ╭─root@localhost.localdomain ~  
    ╰─➤   echo “daadadfaedqdac” | tr a-z A-Z
    DAADADFAEDQDAC
    

    实例2:把所有的大写字母都转化为小写字母

    ╭─root@localhost.localdomain ~  
    ╰─➤   echo “SDSDA2WZFAF” | tr A-Z a-z
    sdsda2wzfaf
    

    实例3:删除一行中的空格

    ╭─root@localhost.localdomain ~  
    ╰─➤   echo “ada dada dada” | tr -d ” ”
    adadadadada
    

    应用实例:获取主机IP地址

    ╭─root@localhost.localdomain ~  
    ╰─➤  ip a | grep global | cut -d " " -f 6 | cut -d "/" -f1
    192.168.80.3
    
    

    应用实例:获取6位随机密码

    ╭─root@localhost.localdomain ~  
    ╰─➤  echo $RANDOM |md5sum|cut -c 1-6
    6a492b
    ╭─root@localhost.localdomain ~  
    ╰─➤  echo $RANDOM |md5sum|cut -c 1-6
    aee13f
    
    

    7、 basename 和 dirname

    # basename:取出基名即文件名
    [root@c43i08102.cloud.i09.amtest90 /etc/sysconfig/network-scripts] 
    #basename `pwd`
    network-scripts
    #  dirname:取出目录名
    [root@c43i08102.cloud.i09.amtest90 /etc/sysconfig/network-scripts]  
    #dirname `pwd`
    /etc/sysconfig
    
    

  • 相关阅读:
    Codeforces 1149 B
    Tenka1 Programmer Contest 2019 D
    BZOJ 1001 [BeiJing2006]狼抓兔子
    Codeforces 741 D
    HDU 5306 Gorgeous Sequence
    HDU 6521 Party
    Codeforces 912A/B
    Educational Codeforces Round 35 B/C/D
    Codeforces 902D/901B
    Codeforces 902B
  • 原文地址:https://www.cnblogs.com/du-z/p/10943055.html
Copyright © 2011-2022 走看看