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