• Shell——文本处理命令


    Shell——文本处理命令

    1、cut

    cut 命令用于显示每行从开头算起 num1 到 num2 的字符,字节和字段,并将这些字符,字节和字段输出。

    语法格式

    cut [参数] 文件名
    
    • 1

    参数:

    • -c :以字符为单位进行分割,后面加n表示取第几列,如-c 3。
    • -d :自定义分隔符,默认分隔符为制表符“\t”
    • -f :指定提取第几列。

    使用实例

    以空格为分隔符,截取并输出文本cut.txt的第一列字符:

    [root@haoming home]# cat cut.txt 
    jin mao
    jing xian
    ling xia
    long cai
    chi neng
    lan chi
    fen ji
    [root@haoming home]# cut -d " " -f 1 cut.txt
    jin
    jing
    ling
    long
    chi
    lan
    fen
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    结合管道符的使用:搜索passwd文件,以冒号为分隔符,截取第1,6,7列

    [root@haoming home]# cat /etc/passwd |grep bash$
    root:x:0:0:root:/root:/bin/bash
    mysql:x:997:1001::/home/mysql:/bin/bash
    es:x:1001:1002::/home/es:/bin/bash
    [root@haoming home]# cat /etc/passwd | grep bash$| cut -d ":" -f 1,6,7
    root:/root:/bin/bash
    mysql:/home/mysql:/bin/bash
    es:/home/es:/bin/bash
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    结合管道符的使用:以冒号为分隔符,截取第三个冒号前面的所有列:

    • cut -d ":" -f -3:截取第三个冒号前面的所有列
    • cut -d ":" -f 3-:截取第三列往后所有列
    [root@haoming home]# cat /etc/passwd | grep bash$| cut -d ":" -f -3
    root:x:0
    mysql:x:997
    es:x:1001
    
    • 1
    • 2
    • 3
    • 4

    2、awk

    awk 命令是逐行扫描文件(从第 1 行到最后一行),寻找含有目标文本的行,如果匹配成功,则会在该行上执行用户想要的操作;反之,则不对行做任何处理。

    语法格式

     awk [参数] '脚本命令' 文件名
    
    • 1

    参数:

    • -F fs : 指定以 fs 作为输入行的分隔符,awk 命令默认分隔符为空格或制表符。

    • -f file : 从脚本文件中读取 awk 脚本指令,以取代直接在命令行中输入指令。

    • -v var=val : 在执行处理过程之前,设置一个变量 var,并给其设备初始值为 val。

    使用实例

    以冒号为分隔符,搜索passwd文件中以root开头的所有行,并输出行的第一列和七列,并以逗号分割:

    [root@haoming home]# cat /etc/passwd | awk -F ":" '/^root/{print $1","$7}'
    root,/bin/bash
    
    • 1
    • 2
    • $0 代表整个文本行

    • $n 代表文本行中的第 n 个数据字段

    BEGIN 和 AND关键字

    BEGIN 会强制 awk 在读取数据前执行该关键字后指定的脚本命令

    END 会在awk读完数据后执行该关键字后指定的脚本命令

    awk 'BEGIN {print "USERNAME"}
    awk 'BEGIN {print "PASSWORD"}
    
    • 1
    • 2

    -v 自定义变量的使用

    把所有的用户id加上指定的数 i:

    -v i=1:定义变量i,初始值为1,这样脚本命令中的变量 i 就不用修改,在外面修改 i 的值即可

    #查询所有的用户id
    [root@haoming home]# cat /etc/passwd | awk -v i=1 -F ":" '{print $3}'
    0
    1
    2
    3
    4
    5
    6
    7
    997
    1001
    996
    #所有的用户id+1
    [root@haoming home]# cat /etc/passwd | awk -v i=1 -F ":" '{print $3+i}'
    1
    2
    3
    4
    5
    6
    7
    8
    998
    1002
    997
    #所有的用户id+5
    [root@haoming home]# cat /etc/passwd | awk -v i=5 -F ":" '{print $3+i}'
    5
    6
    7
    8
    9
    10
    11
    12
    1002
    1006
    1001
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
  • 相关阅读:
    多线程环境下的单例模式
    Matlab上机三(Apriori算法)
    一篇文章让你掌握HTML+CSS
    Android 文字转语音播放实现
    ssh总是很短时间自动断开连接
    MySQL 本地安装
    【nlp】2.6 注意力机制Attention
    如何在多御安全浏览器中自定义新标签页?
    风控模型中特征重要度的两种筛选方法
    java计算机毕业设计家教管理系统源码+mysql数据库+系统+lw文档+部署
  • 原文地址:https://blog.csdn.net/wpc2018/article/details/125441394