zoukankan      html  css  js  c++  java
  • 文本处理工具和正则表达式

    文本常见处理工具
    1.cat
    cat可以查看文本内容
    -E:显示行结束符$
    -A:显示所有控制符
    -n:对显示出的每一行进行编号
    -b:非空行编号
     
    2.nl
    显示行号,相当于cat-b
     
    3.tac
    逆向显示文本内容
     
    [10:44:34 root@aiyoubucuo ~]$cat ybw
    123456
    yang
    [10:44:44 root@aiyoubucuo ~]$tac ybw
    yang
    123456
    4.rev
    将同一行的内容逆向显示
    [10:44:34 root@aiyoubucuo ~]$cat ybw 123456 yang 
    [10:45:24 root@aiyoubucuo ~]$rev ybw 654321 gnay
     
    5.hexdump
    查看文件十六进制
     
    [10:54:19 root@aiyoubucuo ~]$hexdump -C /etc/issue
    00000000  5c 64 20 5c 6d 20 5c 6e  20 5c 73 20 0a           |d m 
     s .|
    0000000d
     
    6.head
    可以显示文件或标准输入的前面行
    -c #  指定获取前#字节
    -n # 指定获取前#行,#如果为负数,表示从文件头取到倒数第#前
    # 同上
    [11:12:52 root@aiyoubucuo ~]$cat /dev/urandom |tr -dc '[:alnum:]'|head -c 12
    1epM2tyuKq4F
     
    7.tail
    tail和head相反,查看文件或标准输入的倒数行
    -c # 指定获取后#字节
    -n # 指定获取 #行,如果#是负数,表示从第#行开始到文件结束
    -# 同上
    -f 跟踪文件名当文件删除再新建同名文件,将可以继续跟踪文件
    [11:21:57 root@aiyoubucuo ~]$cat ybw|tail -n +3
    3
    4
    5
    6
    8.cut
    cut命令可以提取文本文件
    -d指明分隔符,-f # :第#个字段,列如:3,第三列
    [11:44:21 root@aiyoubucuo ~]$cat /etc/passwd|cut -d: -f1
    root
    bin
    daemon
    adm
    lp
    sync
    shutdow
    以冒号为分隔符,取第一列字段
     
    9.paste
    合并多个文件同行号的列到一行
    -d # 分隔符:指定分隔符
    -s 所有行合并成一行
    [11:49:35 root@aiyoubucuo ~]$paste ybw yang 
    1 a
    2 b
    3 c
    4 d
    5 e
    6 f
    [11:49:47 root@aiyoubucuo ~]$paste -d: ybw yang 
    1:a
    2:b
    3:c
    4:d
    5:e
    6:f
    [11:50:23 root@aiyoubucuo ~]$paste -s ybw yang 
    1 2 3 4 5 6
    a b c d e f 
     
    10分析文本工具
    wc
    收集文本统计数据
    -l 只技术行数
    -w 只计数单词总数
    -c 只计数字节总数
    -m 只计数字符总数
    -L 显示文件中最长行的长度
    [11:51:06 root@aiyoubucuo ~]$cat /etc/passwd|wc -l
    50
    文件行数50行
     
    11.sort
    文本排序
    -r 执行反方向由上至下整理
    -R 随机排序
    -n 执行按数字大小整理
    -h 人类可读排序,如2k1G
    -u 合并重复项,即去重
    
    

    [16:07:58 root@centos7 ~]$df |tr -s ' ' '%'|cut -d% -f 5|tail -n +2|sort -rn
    14
    3
    3
    1
    0
    0
    0
    0

    看出磁盘最高使用率
     
    12.uniq
    命令从输入中删除前后相接的重复的行
    -c 显示每行重复出现的次数
    -d 仅显示重复过的行
    -u 进现实不曾重复的行
    
    

    [16:08:56 root@centos7 ~]$df |tr -s ' ' '%'|cut -d% -f 5|tail -n +2|sort -rn|uniq -c
    1 14
    2 3
    1 1
    4 0

    sort配合uniq使用
     
    13.diff
    比较文件之间的区别
    -u 选项来输出"统一的(unified)"diff格式文件,最适合用于补丁文件
    [14:54:40 root@aiyoubucuo ~]$diff -u ybw yang
    --- ybw 2020-12-10 14:54:18.657174910 +0800
    +++ yang 2020-12-10 14:53:19.613027594 +0800
    @@ -1,5 +1,5 @@
    nihao
    -wang
    +ybw
    lili
    -zhang
    +xiaoming
     
    15.扩展正则表达式
    字符匹配元字符
    . 任意单个字符
    [yang] 指定范围的字符
    [^yang] 不在指定范围的字符
    [:alnum:] 字母和数字
    [:alpha:] 代表任何英文大小写字符 A-Z,a-z
    [:lower:] 小写字母
    [:upper:] 大写字母
    [:blank:] 空白字符
    [:space:] 水平和垂直的空白字符(比[:blank:]包含范围广)
    [:cntrl:] 不可打印的控制字符 (退格,删除,警铃..)
    [:digit:] 十进制数字
    [:xdigit:] 十六进制数字
    [:graph:] 可打印的非空白字符
    [:print:] 可打印字符
    [:punct:] 标点符号
     
    此时匹配
    * 匹配前面字符任意次
    ? 0或1次
    + 1次或多次
    {n} 匹配n次
    {m,n} 至少m,至多n次
     
    位置牟定
    ^ 行首
    $ 行尾
    <语首
    >语尾
     
    16.文本处理三剑客之grep
    -m # 匹配#次后停止
    -v 取反
    -i 忽略大小写
    -n 显示匹配的行号
    -c 统计匹配的行数
    -o 仅显示匹配到的字符串
    -w 匹配整个单词
    -E 使用扩展正则表达式,egrep
    grep例子
    [16:42:27 root@aiyoubucuo ~]$ifconfig | egrep -o '(([0-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]).){3}([0-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])' 
    10.0.0.8
    255.255.255.0
    10.0.0.255
    127.0.0.1
    255.0.0.0
    192.168.122.1
    255.255.255.0
    192.168.122.255 
    取出ip地址

    [16:47:16 root@centos7 ~]$grep -nr 'PS' /etc/profile.d/
    /etc/profile.d/bash_completion.sh:2:[ -z "$BASH_VERSION" -o -z "$PS1" -o -n "$BASH_COMPLETION_COMPAT_DIR" ] && return
    /etc/profile.d/colorls.sh:2:PS1="[e[1;36m][[e[0m] [e[1;32m]u[e[31m]@h[e[1;37m] W[e[1;35m]][e[0m]$"

    可以根据字符查找在哪个文件里

     17.文本三剑客之sed

    sed [选项] ... 'script;script;...' 输入文件..

    -n 不输出模式空间内容到屏幕,即不自动打印

    -e 多点编辑

    -f file 从指定文件中读取编辑脚本

    -r, -E 使用扩展正则表达式

    -i.bak 备份文件并原处编辑

    命令

    p 打印当前模式空间内容,追加到默认输出之后

    d 删除模式口空间匹配的行,并立即启用下一轮循环

    a[]text 在指定行后面追加文本 ,支持

    i[]text 在行前面插入文本

    c[]text 替换行为单行或多行文本

    s/pattern/string/修饰符  查找替换,支持使用其它分隔符,可以是其它形式:s@@@,s###替换修饰符

    g 行内全局替换

    p 显示替换成功的行

    1.[16:36:02 root@centos7 ~]$sed -n '2p' /etc/passwd
    bin:x:1:1:bin:/bin:/sbin/nologin
    输出文件第二行

      2.[16:43:12 root@centos7 ~]$df |sed -n '/^/dev/sd/p'
      /dev/sda1 1038336 145256 893080 14% /boot

       取/dev/sd开头的行打印

      3.[16:48:30 root@centos7 ~]$seq 10 |sed -n '2,3p'
      2
      3

      取2至3行打印

    [16:53:04 root@centos7 ~]$seq 10 |sed -n '2~2p'
    2
    4
    6
    8
    10

    取偶数行打印

    [19:58:40 root@centos7 ~]#cat ybw
    aaaaaaaaa
    cccccccccccc
    zzzzzzzzzzz

    [20:02:03 root@centos7 ~]#sed -i '/a/as' ybw
    [20:09:24 root@centos7 ~]#cat ybw
    aaaaaaaaa
    s
    cccccccccccc
    zzzzzzzzzzz

    -i保存文件,a在指定行文本后追加文本,支持 实现多行追加

    i行前,c代替行

    sed -i '/^$/d' file

    删除文件空行

    [17:26:13 root@aiyoubucuo ~]#sed -nr 's/(r..t)/1er/p' /etc/passwd
    rooter:x:0:0:root:/root:/bin/bash

    替换,1代表括号内容r..t替换为r..ter

    [19:29:44 root@aiyoubucuo ~]#echo a.b.c.gz |sed -nr 's/.*.([^.]+)$/1/p'
    gz

    取文件的前缀和后缀,前面是任意字符,结尾的意思是排除点一个或多个字符,前面.用转义符转译代表.gz括号取出结尾

    [16:39:19 root@centos7 ~]$df |sed -nr '/dev/sda/s/.* ([0-9]+)%.*/1/p'
    14

    取以/dev/sda开头行的分区利用率

  • 相关阅读:
    Java实现调用API识别图像中的文字并对图片重命名
    推荐大家一个人工智能领域安全信息学方向旗舰会议(EI索引),诚邀广大学子投稿!
    python随笔 1
    Neo4j
    Web项目部署到tomcat外部并配置其他端口访问和无项目名
    springboot项目
    解决找不到参数 问题,MyBatisSystemException
    置顶功能 -- 数据表格的某行数据的置顶功能 -- Demo
    Spring-Task定时任务, (springboot项目, 动态设置时间) -- Demo
    BootStrap-table表格 -- Demo
  • 原文地址:https://www.cnblogs.com/aiyoubucuo/p/14116270.html
Copyright © 2011-2022 走看看