• 6-1 文本处理工具和正则表达式


    文本处理工具和正则表达式

    cat命令

    cat [OPTION]...[FILE]...
    查看文本文件,不能使用cat查看二进制文件,否则会乱码
    什么选项都不加时,默认接受标准输入,并输出在屏幕上
    可以接受标准输入 cat < a.txt
    默认看不到回车,tab等不可见符号

    cat -E              #显示行结束符$  
    cat -A              #可以查看tab和回车键
    vim: set ff=dos     #vim中设置文件格式位windows文本格式  
    cat -n              #显示行号,空行也显示行号  
    cat -b              #显示行号,空行不显示行号  
    cat -s              #压缩相邻的空行  
    

    tac命令

    与cat相反,把文件按照相反方向显示,以行为单位

    nl命令

    显示行号,类似于cat -b

    rev命令

    rev FILE将整行反转,行本身仍然按照顺序显示

    hexdump命令

    hexdump -C -n 512 /dev/sda 查看sda硬盘的前512字节

    od,xdd也都是查看二进制文件的命令

    more命令

    分页显示文本文件内容的,回车一行一行,空格翻页

    less命令

    一页一页地查看文件或STDIN输出
    man命令就是使用less,可以翻页,搜索等
    /TXT 用来搜索对应文本,使用n跳转下一个N跳转上一个

    less和more都支持配合管道命令分页显示

    head命令

    head FILE                                       #显示前十行  
    head -c$ FILE                                   #显示前$个字节 
    head -n$ FILE                                   #显示前$行
    head -$ FILE                                    #显示前$行 
    cat /dev/urandom |tr -dc '[:alnm:]'|head -c10   #利用urandom设备产生的随机数,过滤出前十个数字和字母,作为随机密码
    

    tail命令

    显示后几行,默认10行,-f监测文件变化,-f跟踪文件描述符,-F跟踪文件名

    tail FILE                                       #默认显示文件的最后10行
    tail -c$                                        #显示最后的$个字节
    tail -n$ 或 tail -$                             #显示最后的$行
    tail -f                                         #跟踪显示文件fd新追加的内容,常用日志监控,相当于 --follow=descriptor
    tail -F                                         #跟踪文件名,相当于 --follow=name --retry
    tailf                                           #类似tail -f,当文件不增长时并不访问文件
    

    由于passwd是创建新文件然后覆盖的,所以f跟踪不到,F可以跟踪

    cut命令

    按列抽取文本命令

    cut -d DELIMITER                                #指明分隔符,默认tab
    cut -f FILEDS                                   #指定显示的字段
    cut -f @                                        #指定显示第@列
    cut -f @,@                                      #指定显示第@和第@段
    cut -f @-@                                      #指定显示@到@列
    cut -f @-@,@                                   #混合使用
    cut -c                                          #按字符切割
    --output-delimiter=STRING                       #指定输出分隔符
    cut -d: -f3 /etc/passwd                         #例子:以:为分隔符,切割/etc/passwd文件,取出其中第三列
    

    paste命令

    合并两个文件同行号的列到一行

    paste FILE1 FILE2
    paste -d                                        #指定分隔符,默认用tab
    paste -s                                        #所有行合成一行显示
    

    paste a.log b.log将同一行合成
    paste -b转换方向,可以使用-d指定分隔符

    wc命令

    统计文件的行数,单词数,字节总数和字符总数
    也可以单独统计某些内容

    wc -l                                           #只计数行数
    wc -w                                           #只技术单词总数
    wc -c                                           #只技术字节总数
    wc -m                                           #只技术字符总数
    wc -L                                           #显示文件中最长行的长度
    

    sort命令

    文本排序,同样支持标准输入

    sort FILE
    sort -r                                         #执行反方向(由上至下)整理
    sort -R                                         #随机排序
    sort -n                                         #执行按数字大小整理
    sort -f                                         #选项忽略(fold)字符串中的字符大小写
    sort -u                                         #选项(独特,unique)删除输出中的重复行
    sort -t c                                       #选项使用c作为字段界定符
    sort -k @                                       #选项按照使用c字符分割的@列来整理能够使用多次
    sort -t: -k3                                    #指定冒号作为分隔符,以第三列排序  
    默认以字符排序,-n才是数字排序的效果
    例子:  
    df |tr -s " " % |cut -d% -f5 |sort -nr  
    seq 55 |sort -R|head -n1取随机数  
    echo $[RANDOM%55+1]  
    cat /dev/urandom |tr -dc '[:digit:]' |head -c2  
    

    uniq命令

    uniq标识独特单一的意思,命令的作用就是将相邻的重复行压缩成一行

    uniq -c                                         #显示重复的次数  
    uniq -d                                         #仅显示重复的行  
    uniq -u                                         #仅显示不曾重复的行
    # 注:连续且完全相同方为重复  
    sort FILE |uniq -c                              #统计合并的行  
    sort FILE |uniq -c |sort -nr                    #可以查看文件中比如登陆日志中链接次数最多的ip等
    

    diff命令,patch命令

    比较两个文件的不同

    diff -u FILE1 FILE2 >diff.patch                 #可以更加详细的不同信息,并输出补丁文件
    diff -b                                         #选项自动备份文件
    patch -b FILE1 diff.patch                       #即可将补丁打上,恢复出原来的文件  
    

    ss命令

    可以查看网络连接数和一些细节

    Linux文本处理三剑客之grep

    文本三剑客小介绍

    grep:文本过滤工具
    sed:stream editor文本编辑工具
    awk:Linux上的实现gawk,文本报告生成器

    grep命令

    grep:文本锅炉(模式:pattern)工具
    grep,egrep,fgrep(不支持正则表达式搜索)
    每次读入一行,符合条件就打印,不符合就继续读下一行,直到读取完整个文件
    支持标准输入
    $USER当前用户名

    grep --color=auto                           #对匹配到的文本着色显示
    grep -m$                                    #显示符合条件的前$行,或者说匹配$行就停止  
    grep -v                                     #反向匹配  
    grep -i                                     #忽略大小写  
    grep -n                                     #加上行号  
    grep -c                                     #统计匹配行数  
    grep -o                                     #将符合条件的字符串显示出来  
    grep -q                                     #不显示结果  
    grep -A$                                    #显示符合条件的后$行  
    grep -B$                                    #显示符合条件的前$行  
    grep -C$                                    #显示符合条件的前后$行  
    grep -e                                     #实现多个选项之间的逻辑or关系
    grep -w                                     #匹配整个单词
    grep -E                                     #使用扩展正则表达式,egrep
    grep -F                                     #相当于fgrep,不支持正则表达式
    grep -f FILE                                #根据模式文件处理
    

    正则表达式

    不是所有命令支持正则表达式
    不支持的可以通过管道和grep来使用正则表达式过滤
    REGEXP: Regular Expressions,由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能
    程序支持:vim, less,grep,sed,awk, nginx,varnish 等 分两类:

    • 基本正则表达式:BRE,grep,vim
    • 扩展正则表达式:ERE,grep -E, egrep,nginx

    正则表达式引擎:

    • 采用不同算法,检查处理正则表达式的软件模块
    • PCRE(Perl Compatible Regular Expressions)

    元字符分类:字符匹配、匹配次数、位置锚定、分组
    man 7 regex可以查看手册
    匹配规则

    字符匹配:
    .                           //匹配任意单个字符
    []                          //匹配指定范围内的任意单个字符,示例:[wang] [0-9] [a-z] [a-zA-Z]
    [^]                         //匹配指定范围外的任意单个字符
    [:alnum:]                   //字母和数字
    [:alpha:]                   //代表任何英文大小写字符,亦即 A-Z, a-z
    [:lower:]                   //小写字母 [:upper:] 大写字母
    [:blank:]                   //空白字符(空格和制表符)
    [:space:]                   //水平和垂直的空白字符(比[:blank:]包含的范围广)
    [:cntrl:]                   //不可打印的控制字符(退格、删除、警铃...)
    [:digit:]                   //十进制数字 [:xdigit:]十六进制数字
    [:graph:]                   //可打印的非空白字符
    [:print:]                   //可打印字符
    [:punct:]                   //标点符号
    
    
    匹配次数:
    //用在要指定次数的字符后面,用于指定前面的字符要出现的次数
    *                           //匹配前面的字符任意次,包括0次
    .*                          //任意长度的任意字符
    ?                          //匹配其前面零次或一次
    +                          //匹配其前面的字符出现至少一次  
    {n}                       //匹配前面字符出现n次
    {n,m}                     //匹配前面的字符至少n次,至多m次
    {,m}                      //匹配前面的字符最多m次
    {n,}                      //匹配前面的字符最少n次
    
    
    位置锚定:
    ^                           //行首锚定,用于模式的最左侧
    $                           //行尾锚定,用于模式的最右侧
    ^PATTERN$                   //用于模式匹配整行
        ^$                      //空行
        ^[[:space:]]*$          //空白行
    < 或                     //词首锚定,用于单词模式的左侧
    > 或                     //词尾锚定,用于单词模式的右侧
    <PATTERN>                 //匹配整个单词
    

    分组与后向引用:

    • 分组:() 将一个或多个字符捆绑在一起,当作一个整体处理,如:(root)+
    • 分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为: 1, 2, 3, ...
    • 1 表示从左侧起第一个左括号以及与之匹配右括号之间的模式所匹配到的字符,示例:
      • (string1(string2))
      • 1 :string1(string2)
      • 2 :string2
    • 后向引用:引用前面的分组括号中的模式所匹配字符,而非模式本身
      或者:| 示例:
      • a|b a或b
      • C|cat C或cat
      • (C|c)at Cat或cat

    扩展正则表达式:
    只保留<,>,1(后向引用)的反斜线,其他的反斜线都去掉

  • 相关阅读:
    python——时间与时间戳之间的转换
    Python3中正则模块re.compile、re.match及re.search
    javascript 模块化开发
    Python细说 xrange 和 range 的区别
    PyInstaller 生成exe文件
    win10安装mysql5.7.14winx64遇到服务无法启动问题解决方法
    Python 自定义队列 数据结构
    spring事务使用心得
    LS 存取文件
    Single Instance Application
  • 原文地址:https://www.cnblogs.com/kjalbert/p/11634972.html
Copyright © 2020-2023  润新知