侧边栏壁纸
博主头像
落叶人生博主等级

走进秋风,寻找秋天的落叶

  • 累计撰写 130562 篇文章
  • 累计创建 28 个标签
  • 累计收到 9 条评论
标签搜索

目 录CONTENT

文章目录

文本处理以及正则表达式

2023-11-26 星期日 / 0 评论 / 0 点赞 / 58 阅读 / 12058 字

====================================================================== ULE-SA1 =====================

======================================================================
ULE-SA1
======================================================================
 
----------------------------------------------------------------------
文本处理与正则表达式
----------------------------------------------------------------------
 
:尚观科技: http://www.uplooking.com
 
.. contents::
.. sectnum::
.. footer:: 尚观科技: http://www.uplooking.com
 
>> 常用文本处理工具
======================================================================
 
::
 
    1. cat tac rev
 
    nich4@ssh:~$ cat pw.txt
    CEBs.ZNTbJQAA
    abcdefg
 
    nich4@ssh:~$ tac pw.txt
    abcdefg
    CEBs.ZNTbJQAA
 
    nich4@ssh:~$ rev pw.txt
    AAQJbTNZ.sBEC
    gfedcba
     
    cat是显示文件内容,tac是cat的倒写,意思也是相反的。
    cat是从第一行显示到最后一行,而tac是从最后一行显示到第一行,
    而rev则是每行从最后一个字符显示到第一个字符
 
    cat:
    -n      对输出进行编号
    -b      与-n相似, 但编号时忽略空行
    -s      多行空行换成一行空行
 
    2.  more/less
    3. tr
       tr 'abc' 'cba' < pw.txt
       tr -d 'abc' < pw.txt
    4. sort
       -b   忽略开头的空格
       -n   以数值来排序
       -r   倒序排列
       -t   指定分隔符
       -k   对哪部分排序(如: 1.2 从第一列的第2个字符开始到最后)
       -f   忽略大小写
       -u   去除重复行
       -o   输出到文件(可以是原文件,而>则不能)
    5. uniq 去除重复行
       -c   统计
       -u   仅打印唯一的行
       -d   仅打印非唯一的行
    6. cut
       -b   指定字节范围
       -c   指定字符范围
       -d   指定分隔符
       -f   指定字段
    7. wc
       -c   打印字节数
       -m   打印字符数
       -l   打印行数
       -w   打印单词数
    8. head/tail
       -cN  输出文件的前N个字节
    9. grep, vimdiff ...
 
regular/re
======================================================================
 
::
 
    为精确匹配而生. 用某种模式去匹配一类字符串的一个公式
    正则表达式是由普通字符(例如字符a到z)以及特殊字符(称为元字符)组成的 文字模式。
    正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配
 
 
正则表达式元字符
======================================================================
 
::
 
    .
            匹配任何单个字符, 不包括换行符
    $        
            行末
    ^        
            行首
    *        
            0个或多个之前的字符
    /        
            转义符
    [ ]
    [c1-c2]
    [^c1-c2]
            匹配括号中的任何一个字符
            [^0-9]    非0至9
            [a-z]
            [A-Z]
            [a-zA-Z]
            ^非
    /<xxx
    xxx/>
            单词首尾
    /( /)  
            把之间的内容定义为组。
            最多可以定义9个组,通过/1-9来引用
    x|y
            x或者y
    +
            匹配1个或多个之前的字符(*)
    ?
            0或1个之前的字符(*)
    [0-9]/{2/}
            匹配指定数目的字符,这些字符是在它之前的表达式定义的
            A[0-9]/{3/}   A123,A456
    /{i,j/}
    /{i,/}
            [0-9]/{4,6/} 匹配连续的任意4 个、5 个或者6 个数字字符
            n, i, j非负整数
 
 
非打印字符
======================================================================
 
::
 
    非打印字符
    例:
    /n    匹配一个换行符
    /r    匹配一个回车符
    /s    匹配任何空白字符,包括空格、制表符、换页符等等
    /S    匹配任何非空白字符
    /t    匹配一个制表符
    /d    匹配一个数字字符。等价于 [0-9]
    /D    匹配一个非数字字符。等价于[^0-9]
         
字符簇(集)
======================================================================
 
::
 
    字符簇      含义  
    [[:alpha:]] 任何字母  
    [[:digit:]] 任何数字  
    [[:alnum:]] 任何字母和数字  
    [[:space:]] 任何白字符
    [[:upper:]] 任何大写字母  
    [[:lower:]] 任何小写字母  
    [[:punct:]] 任何标点符号  
    [[:xdigit:]] 任何16进制的数字,相当于[0-9a-fA-F]
     
example
======================================================================
 
::
 
    Linux中很多命令都可以使用正则表达式
        grep -E
        locate -r
        sed
        awk
        ....
        vim
            :%s/^/s*//
                去掉行首的空白
            :%s/ *$//
                去掉行尾的所有空格
            :%s/^/ /
                在每一行头上加入一个空格
            :%s/^[0-9]*//
                去掉行首的所有数字字符
            :%s/^[0-9 /t]*//g
                去掉行首数字及空白
            :%s/b[aeio]g/bug/g
                将所有的bag、beg、big 和bog 改为bug
            :%s/t/([aou]/)g/h/1t/g
                :%s/t/(a/|o/|u/)g/h/1t/g
                将所有tag、tog 和tug 分别改为hat、hot和hut
                (注意用group 的用法和使用/1 引用前面被匹配的字符)
            :%s/.*/(abc aaa/)//1/g
                :%s/.*abc/abc/g
                把abc前面的字符都删除掉
            :%s/.*/(abc/|hat/)//1/g
                把abc及hat前面的字符都删除掉
 
:%s//([^0-9]/)1[358][0-9]/{9/}/([^0-9]/)//113800138000/2/g
:%s//([^0-9]/|^/)1[358][0-9]/{9/}/([^0-9]/|$/)//113800138000/2/g
                 
.. note:: 深入学习资源:
 
    O'Reilly <<Mastering.Regular.Expressions>> 3ed    <<精通正则表达式>>
    微软正则表达式教程:msdn.microsoft.com/en-us/library/28hw3sce
    www.regular-expressions.info  
 
 
 
 
在secure里过滤出sshd.*: Failed password, 然后在输出的内容里再把正确的IP提取出来, 之后, 对其排序, 统计, 再按次数从大到小排序.
 
grep "sshd.* Failed password" secure | grep -Eo "/b[0-9]{1,3}/.[0-9]{1,3}/.[0-9]{1,3}/.[0-9]{1,3}/b" | sort | uniq -c | sort -rn

广告 广告

评论区