• linux文本处理工具及正则表达式


    cat命令:查看文本内容

             cat [选项]... [文件]...

             -E    显示行结束符

             -n    显示文本内容时显示行号

             -A    显示所以控制符

             -b    非空行编号

             -s     压缩连续的空行成一行

    [root@bogon ~]# cat -n /etc/issue > test.txt    ##查看文件内容并显示行号,重定向到test.txt文件中
    [root@bogon ~]# cat test.txt 
         1    S
         2    Kernel 
     on an m
         3    
    [root@bogon ~]# cat > file <<EOF    ##创建file文件,输入内容以EOF结束
    > kernel 
     on an m
    > EOF
    [root@bogon ~]# cat file 
    kernel 
     on an m

    more       分页显示

             more [OPTIONS...] FILE...

    less  分页显示,是man命令使用的分页器

    [root@bogon ~]# less /etc/httpd.conf 
    [root@bogon ~]# cat /etc/httpd.conf |more

    head命令 : 

             head [OPTION]... [FILE]...

        -n  显示文件前n行,默认显示前10行

        -c # 显示文件前#个字节内容

        -q  不显示包含给定文件名的文件头

    [root@bogon ~]# head -5 /etc/fstab     ##显示文件前5行
    #
    # /etc/fstab
    # Created by anaconda on Mon May  1 04:49:06 2017
    #
    
    [root@bogon ~]# head -q -n 5 /etc/fstab /etc/issue    ##显示多个文件前5行,并且不显示文件头
    
    #
    # /etc/fstab
    # Created by anaconda on Mon May  1 04:49:06 2017
    #
    S
    Kernel 
     on an m  

    tail命令:

    tail [OPTION]... [FILE]...

             -f   实时查看,常用监控日志文件

       -c #   显示后#字节

       -n #  显示后#行,默认显示行10行

    [root@bogon ~]# tail -2 /etc/passwd    ##显示文件后2行
    sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
    [root@bogon ~]# tail -f /var/log/messages    ##不停地去读最新的内容,有实时监视的效果,用Ctrl+c来终止
    May 2 02:46:26 localhost systemd: Configuration file /usr/lib/systemd/system/wpa_supplicant.service is marked executable. Please remove executable permission bits. Proceeding anyway. May 2 02:46:26 localhost yum[16325]: Installed: httpd-2.4.6-45.el7.centos.4.x86_64 May 2 03:01:01 localhost systemd: Started Session 10 of user root. May 2 03:01:01 localhost systemd: Starting Session 10 of user root. May 2 03:45:49 localhost systemd-logind: Removed session 4. May 2 03:46:20 localhost systemd: Started Session 11 of user root. May 2 03:46:20 localhost systemd-logind: New session 11 of user root. May 2 03:46:20 localhost systemd: Starting Session 11 of user root. May 2 04:01:01 localhost systemd: Started Session 12 of user root. May 2 04:01:01 localhost systemd: Starting Session 12 of user root.

     cut命令:

    cut [OPTION]... [FILE]...

      -d  指明分隔符,默认tab

      -f  第# 个字段

      #,#[,#] :离散的多个字段,例如1,3,6

      #-# :连续的多个字段,  例如1-6

      混合使用:1-3,7

      -c 按字符切割

      --output-delimiter=STRING指定输出分隔符

     显示文件前10行,以“:”作为分隔符打印第1和第7个字段并分隔符换成空格输出:

    [root@bogon ~]# head /etc/passwd |cut -d ":" -f1,7 --output-delimiter="   "  ##查看系统用户使用的shell
    root   /bin/bash      
    bin   /sbin/nologin
    daemon   /sbin/nologin
    adm   /sbin/nologin
    lp   /sbin/nologin
    sync   /bin/sync
    shutdown   /sbin/shutdown
    halt   /sbin/halt
    mail   /sbin/nologin
    operator   /sbin/nologin
    [root@bogon ~]# ip addr |tail -4 |head -1 |cut -d "/" -f1 |cut -d " " -f6  ##获取ip地址
    192.168.25.102

    paste命令:

      paste [OPTION]... [FILE]...

      -d  分隔符: 指定分隔符,默认用TAB

      -s     所以行合并成一行显示

    [root@bogon ~]# paste /etc/resolv.conf /etc/issue    ##合并输出两个文件的内容
    # Generated by NetworkManager    S
    nameserver 202.106.46.151    Kernel 
     on an m
    nameserver 202.106.195.68    
    [root@bogon ~]# paste -s /etc/issue    ##对输出的内容独立占一行
    S    Kernel 
     on an m    

    wc命令:统计文件内容

             -l      统计行数

             -w    统计单词个数

             -c     统计字节数

             -m    只计数字符总数

         -L  打印最长行的长度

    [root@bogon ~]# cat /etc/passwd |wc -l  ##统计文件的行数
    22
    [root@bogon ~]# echo "aaa bbb ccc" |wc -w    ##统计输出的单词数量
    3
    [root@bogon ~]# echo "abcdef" |wc -m    ##统计输出有多少个字节
    7

    文本排序:sort [options] file(s)

      -r   逆序排序

      -n   根据字符串数值进行比较

      -f   忽略字符大小写

      -u   去重。配合-c,严格校验排序;不配合-c,则只输出一次排序结果

      -t   使用指定的分隔符代替非空格到空格的转换

      -k 1 在位置1 开始一个key,在位置2 终止(默认为行尾)

    [root@bogon ~]# head /etc/passwd |sort -t ":" -k 3nr    ##以“:”分割对第三个字段数值进行倒序排列
    operator:x:11:0:operator:/root:/sbin/nologin
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    halt:x:7:0:halt:/sbin:/sbin/halt
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    sync:x:5:0:sync:/sbin:/bin/sync
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    bin:x:1:1:bin:/bin:/sbin/nologin
    root:x:0:0:root:/root:/bin/bash
    [root@bogon ~]# cat /etc/passwd |sort -t':' -k 7 -u    ##以“:”分割对第7个字段排序,去重
    root:x:0:0:root:/root:/bin/bash
    sync:x:5:0:sync:/sbin:/bin/sync
    halt:x:7:0:halt:/sbin:/sbin/halt
    bin:x:1:1:bin:/bin:/sbin/nologin
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

    uniq 命令:从输入中删除重复的前后相接的行

       uniq [OPTION]... [FILE]...

      -c:  显示每行重复出现的次数;

      -d:  仅显示重复过的行;

      -u:  仅显示唯一的行;

      -i:  比较时不区分大小写

    [root@bogon ~]# uniq -c ip.txt     ##显示重复行出现的次数,相邻行且完全一样为重复
          3 101.200.78.99
          1 103.41.52.94
          2 106.185.47.161
          1 101.200.78.99
          2 113.240.250.155
          1 13.0.782.215
          1 185.130.5.231

    文件比较:

    diff命令:比较两个文件之间的区别

      -r  递归比较

      -u  输出“统一的(unified )

      patch 命令复制在其它文件中进行的改变(要谨慎使用!)

      -b   选项来自动备份改变了的文件

    [root@bogon ~]# diff file1.txt file2.txt 
    8c8      ##表示第8行有区别
    < 113.240.250.155
    ---
    > 133.240.250.155

    替换和删除字符:

             tr [OPTION]... SET1 [SET2]

                       -c 或——complerment :取字符集的补集

                       -d 或——delete :删除所有属于第一字符集的字符;

                       -s 或—squeeze-repeats :把连续重复的字符以单独一个字符表示

                       -t 或--truncate-set1 :先删除第一字符集较第二字符集多出的字符

    [root@bogon ~]# tr -s '
    '  < file1.txt     ##删除空行
    103.41.52.94
    106.185.47.161
    S
    Kernel 
     on an m
    106.185.47.161
    [root@bogon ~]# tr  A-Z a-z < file1.txt     ##把大写字母换成小写
    103.41.52.94
    106.185.47.161
    s
    kernel 
     on an m
    
    106.185.47.161
    grep命令:过滤文本内容

             grep [OPTIONS] PATTERN [FILE...]

             -i       查找时忽略大小写

             -v     取反

        -n      显示匹配的行号

         -c     统计匹配的行数

        -o     仅显示匹配到的字符串;

        -q    静默模式,不输出任何信息

      -A #   after,  后#行 行

      -B #  before,  前#行 行

      -C #   context,  前后各#行 行

      -e   实现多个选项间的逻辑or 关系

      -w   整行匹配整个单词

      -E   使用扩展正则表达式

    正则表达式:

    .     匹配任意单个字符;

    []    匹配指定范围内的任意单个字符

    [^]  匹配指定范围外的任意单个字符

    *   匹配前面的字符任意次,包括0次 次贪婪模式:尽可能长的匹配

    .*   任意长度的任意字符

    ?   匹配其前面的字符0 或1次 

    +   匹配其前面的字符至少1次

    {m}   匹配前面的字符m次 

    {m,n}   匹配前面的字符至少m 次,至多n次 

    {,n}   匹配前面的字符至多n次 次

    {m,}   匹配前面的字符至少m次

    ^   行首锚定,用于模式的最左侧

    $   行尾锚定,用于模式的最右侧

    ^PATTERN$  用于模式匹配整行

    ^$   空行

    ^[[:space:]]*$   空白行

    < 或 或    词首锚定,用于单词模式的左侧

    > 或 或    词尾锚定;用于单词模式的右侧

    <PATTERN>   匹配整个单词

    ()    将一个或多个字符捆绑在一起,当作一个整体进行处理

    [:alpha:] 所有字母,包括大、小写

    [:alnum:] 所有字母和数字

    [:upper:] 所有大写字母

    [:lower:] 所有小写字母

    [:digit:] 所有数字

    [:punct:] 所有标点符号

    [:space:] 空格和Tab

    扩展正则表达式:

    .    任意单个字符

    []    指定范围的字符

    [^]    不在指定范围的字符

    *   匹配前面字符任意次

    ?   0 或1次 次

    +   1 次或多次

    {m}   匹配m次 

    {m,n}   至少m ,至多n次 

    ^  行首

    $   行尾

    <,   语首

    >,     语尾

    分组  ()

      后向引用:1, 2, ...

         或者:a|b

         C|cat: C 或cat

         (C|c)at:Cat 或cat

    [root@bogon ~]# grep '^(root|apache)' test.txt   ##过滤以root或apache开头的行
    root:x:0:0:root:/root:/bin/bash
    apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
    [root@bogon ~]# grep -R /sbin/nologin *     ##递归从所以文件中查询匹配的内容
    test.txt:bin:x:1:1:bin:/bin:/sbin/nologin
    test.txt:daemon:x:2:2:daemon:/sbin:/sbin/nologin
    [root@bogon ~]# ip addr |grep "dynamic" |tr -s " " |cut -d " " -f3 |cut -d "/" -f1  ##过滤ip地址
    192.168.25.102
    [root@bogon ~]# ip addr |grep -E -o "([0-9]{1,3}[.]){1,3}[0-9]{1,3}"
    127.0.0.1
    192.168.25.102
    192.168.25.255
    [root@bogon ~]# df -Th |tr -s " " |sort -k 6nr |head -1  ##查出使用率的最大百分比值的分区
    /dev/sda1 xfs 497M 125M 373M 25% /boot
    [root@bogon ~]# cat /etc/passwd  |sort -t ':' -k 3n |tail -1 |cut -d ":" -f1,3,7
    systemd-bus-proxy:999:/sbin/nologin      ##找出uid最大值的用户,并显示用户名、UID、及shell类型
  • 相关阅读:
    洛谷 AT2000 Leftmost Ball
    洛谷 P1326 足球
    洛谷 P4868 Preprefix sum
    洛谷 P2596 [ZJOI2006]书架
    HDU 3415 Max Sum of Max-K-sub-sequence
    洛谷 P3901 数列找不同
    洛谷 P3609 [USACO17JAN]Hoof, Paper, Scissor蹄子剪刀…
    洛谷 P5749 [IOI2019]排列鞋子
    验证码解决表单重复的原理
    session和浏览器之间的技术内幕
  • 原文地址:https://www.cnblogs.com/yuezhimi/p/6794426.html
Copyright © 2020-2023  润新知