袁党生博客

  • 主页
  • linux基础
  • SHELL
  • WEB
  • 负载
  • 企业级应用
  • 数据库
  • KVM
  • Docker
  • K8S
  • 监控
  • 存储
  • 博客搭建问题
  1. 首页
  2. linux基础
  3. 正文

文本处理工具

2020年8月19日 2230点热度 0人点赞 0条评论

1、文本工具

1.1 抽取文本的工具

  • 文件内容:less和cat
  • 文件截取:head和tail
  • 按列抽取:cut

文件查看

  • 文件查看命令
      cat,tac,rev
  • cat [OPTION]... [FILE]...
      -E:显示行结束符$
      -n:对显示出的每一行进行编号
      -A:显示所有控制符
      -b:非空行编号
      -s:压缩连续的空行成一行
  • tac 反向显示文件内容(上下方向)
  • rev 反向显示文件内容(左右方向)

    [root@centos7 ~]#cat -E f1
    aa$
    bb$
    cc$
    [root@centos7 ~]#cat -n f1
     1  aa
     2  bb
     3  cc
    [root@centos7 ~]#cat -A f3
    aa$
    bb  c$
    cc$
    $
    dd$
    $
    [root@centos7 ~]#cat -b f3
     1  aa
     2  bb  c
     3  cc
    
     4  dd

    tac:倒序查看(根据列)

    [root@centos7 ~]#cat f1
    aa
    bb
    cc
    [root@centos7 ~]#tac f1
    cc
    bb
    aa

    rev:倒序查看(根据行)

    [root@centos7 ~]#cat f2
    aa  bb  cc
    [root@centos7 ~]#rev f2
    cc  bb  aa

分页查看文件内容

  • more:分页查看文件
    用法:more [OPTIONS...] FILE...
      -d: 显示翻页及退出提示
    注意:more查看文件,到文件内容底部以后会自动退出
  • less:一页一页地查看文件或STDIN输出
    查看时有用的命令包括:
     /文本搜索  文本
     n/n 跳到下一个或上一个匹配
    less 该命令是man命令使用的分页器

显示文本前或后行内容

  • head [OPTION]... [FILE]...
      -c #: 指定获取前#字节
      -n #: 指定获取前#行
      -#: 指定行数
  • tail [OPTION]... [FILE]...
      -c #: 指定获取后#字节
      -n #: 指定获取后#行
      -#:
      -f: 跟踪显示文件fd新追加的内容,常用日志监控。但是文件在其他窗口被删除,不会有提示
       相当于 --follow=descriptor
      -F: 跟踪文件名,相当于—follow=name --retry。文件在其他窗口被删除,会出现提示

知识扩展:
取前10位除了字母和数字的随机数作为密码
cat /dev/urandom | tr -dc '[:alnum:]' | head -c10

tr命令
注:由于该命令可以与本章多个命令相结合,因此在此回顾一下tr命令相关内容

  • 转换和删除字符
  • 语法:tr [OPTION]... SET1 [SET2]
  • 选项:
     -c –C --complement:取字符集的补集
     -d --delete:删除所有属于第一字符集的字符
     -s --squeeze-repeats:把连续重复的字符以单独一个字符表示
     -t --truncate-set1:将第一个字符集对应字符转化为第二字符集对应的字符

    [root@centos7 ~]#tr 'a-z' 'A-Z'
    aaabbbccc123
    AAABBBCCC123
    [root@centos7 ~]#tr -d "[0-9]"
    123vqadsa3241
    vqadsa
    [root@centos7 data]#echo {a..z} >f1
    [root@centos7 data]#cat f1
    a b c d e f g h i j k l m n o p q r s t u v w x y z
    [root@centos7 data]#tr -d [f-m]  <f1
    a b c d e         n o p q r s t u v w x y z

按列抽取文本cut和合并文件paste

  • cut [OPTION]... [FILE]...
      -d DELIMITER: 指明分隔符,默认tab
      -f FILEDS:
       #: 第#个字段
       #,#[,#]:离散的多个字段,例如1,3,6
       #-#:连续的多个字段, 例如1-6
      混合使用:1-3,7
      -c 按字符切割
      --output-delimiter=STRING指定输出分隔符

    [root@centos7 ~]#cat /etc/passwd | cut -d: -f1,3,7
    root:0:/bin/bash
    bin:1:/sbin/nologin
    daemon:2:/sbin/nologin
    adm:3:/sbin/nologin
    lp:4:/sbin/nologin
    sync:5:/bin/sync
    shutdown:6:/sbin/shutdown
    halt:7:/sbin/halt
    mail:8:/sbin/nologin
    operator:11:/sbin/nologin
    games:12:/sbin/nologin
    [root@centos7 ~]#cat /etc/passwd | cut -c3-5
    ot:
    n:x
    emo
    m:x
    :x:
    nc:
    utd
    lt:
    il:

cut和paste

  • 显示文件或STDIN数据的指定列
     cut -d: -f1 /etc/passwd  按:号切割,并取出第一列
     cat /etc/passwd | cut -d: -f7 按:号切割,并取出第7列
    cut -c2-5 /usr/share/dict/words  取出整个文件第2到第5个字符
  • paste合并两个文件同行号的列到一列
    用法:paste [OPTION]... [FILE]...
      -d 分隔符:指定分隔符,两个文件中间以指定分隔符分隔开,默认用TAB
      -s : 所有行合成一行显示
      paste f1 f2 文件(横向)合到一块
      paste -s f1 f2 所有行合成一行

    [root@centos7 ~]#paste f1 f2
    aa  aa  
    bb  bb  
    vv  cc
    dd  dd
    xx  ee
    [root@centos7 ~]#cat f1
    aa
    bb
    vv
    dd
    xx
    [root@centos7 ~]#cat f2
    aa  
    bb  
    cc
    dd
    ee
    [root@centos7 ~]#paste f1 f2
    aa  aa  
    bb  bb  
    vv  cc
    dd  dd
    xx  ee
    [root@centos7 ~]#paste -d: f1 f2
    aa:aa  
    bb:bb  
    vv:cc
    dd:dd
    xx:ee
    [root@centos7 ~]#paste -s f1 f2
    aa  bb  vv  dd  xx
    aa      bb      cc  dd  ee

1.2 分析文本的工具

  • 文本数据统计:wc
  • 整理文本:sort
  • 比较文本:diff和patch

收集文本统计数据wc

  • wc命令统计的内容分别是:单词总数、行总数、字节总数和字符总数
  • 可以对文件或STDIN的数据运行
    如:wc /etc/passwd
     45  88  2311 /etc/passwd
     行数 字数 字节数
    注意:当文本中出现汉字时,一个汉字占3个字符,加上换行符,会多出4个字符(字符和字节不是同一概念)
  • 常用选项
     -l:只计数行数
     -w:只计数单词总数
     -c:只计数字节总数
     -m:只计数字符总数
     -L:显示文件中最长行的长度

    [root@centos7 ~]#cat /etc/passwd |wc -l
    45
    [root@centos7 ~]#cat /etc/passwd |wc -w
    88
    [root@centos7 ~]#cat /etc/passwd |wc -c
    2311
    [root@centos7 ~]#cat /etc/passwd |wc -m
    2311
    [root@centos7 ~]#cat /etc/passwd |wc -L
    99

文本排序sort

  • 把整理过的文本显示在STDIN,不改变原始文件
    用法:sort [options] file(s)
  • 常用选项:
    -r:执行反方向(由上至下)整理
    -R:随机排序
    -n:执行按数字大小整理
    -f:选项忽略(fold)字符串中的字符大小写
    -u:选项(独特,unique)删除输出中的重复行
    -t c:选项使用c做为字段界定符
    -k X:选项按照使用c字符分隔的X列来整理能够使用多次
    cat /etc/passwd |sort -t: -k3 -nr 取第3列uid进行从大到小排序

知识扩展:
seq 75 |sort -R |head -n1 随机从75个数中取出一个数字,数字75可自定义

uniq

  • uniq命令:从输入中删除前后相接的重复的行
  • uniq [OPTION]... [FILE]...
      -c: 显示每行重复出现的次数
      -d: 仅显示重复过的行
      -u: 仅显示不曾重复的行
     注:连续且完全相同方为重复
  • 常和sort命令配合使用:
     sort userlist.txt | uniq -c 去重并排序

知识扩展:
cat file1 file2 |sort |uniq -d 取两个文件的交集(重复的行)

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

diff foo.conf foo2.conf  
5c5  
< use_widgets = no  
\-\-\-  
\> use_widgets = yes  

 * 注明第5行有区别(改变)

赋值对文件改变patch

  • diff 命令的输出被保存在一种叫做“补丁(diff.log)”的文件中
     * 使用-u选项来输出“统一的”diff格式文件,最适用于补丁文件
  • patch 赋值在其他文件中践行的改变(谨慎使用)
     * 使用-b选项来自动备份改变了的文件
     $ diff -u foo.conf foo2.conf > foo.patch
     $ patch -b foo.conf foo.patch
    示例:
    diff -u f1 f2 >diff.log 把比较结果重定向到diff.log文件中
    patch 根据“补丁”文件(diff.log)还原源文件(f2)
    rm -rf f1 删除f1文件
    patch -b f1 diff.log 根据diff.log文件恢复f1文件
    先备份f1文件并将该文件重命名为f1.orig
    然后根据diff.log恢复f2文件,但f2文件恢复后被重命名为f1
    因此恢复后,f1文件即为f2文件内容,f1.orig文件为f1文件内容

练习:

1、找出ifconfig “网卡名” 命令结果中本机的IPv4地址  
ifconfig ens33|head -n2 |tail -n1|tr -s " "|cut -d" " -f3  
2、查出分区空间使用率的最大百分比值  
df |tr -s " " %|cut -d% -f5|sort -nr|head -n1  
3、查出用户UID最大值的用户名、UID及shell类型  
cat /etc/passwd |cut -d: -f1,3,7|sort -t: -k2 -nr|head -n1  
4、查出/tmp的权限,以数字方式显示  
stat /tmp |head -n4 |tail -n1|tr -dc [:digit:]|cut -c1-4  
5、统计当前连接本机的每个远程主机IP的连接数,并按从大到小排序  
netstat -nt|tr -s " " : |cut -d: -f6|tr -dc "[:digit:].\n"|sort|uniq -c|sort -nr  
标签: 暂无
最后更新:2020年9月2日

袁党生

这个人很懒,什么都没留下

点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

COPYRIGHT © 2023 linux学习. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

豫ICP备18039507号-1