文本处理以及正则表达式

======================================================================
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

转载于:https://my.oschina.net/u/3251865/blog/839167

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值