文本处理三剑客:git
grep系:grep 、egrep 、fgrep ,文本搜索工具,基于“PATTERN"对于给定的文本进行模糊搜索,grep系默认工做于贪婪模式下。正则表达式
sed:Stream EDitor,流编辑器,行编辑器,文本编辑工具;算法
awk:gawk——GUN awk,文本格式化工具,文本报告生成器,文本处理的编程语言;编程
grep系:app
grep:利用正则表达式进行全局搜索并将匹配的行显示出来;dom
grep [OPTIONS] PATTERN [FILE.....]编程语言
PATTERN:过滤条件,是由正则表达式元字符以及没有特殊含义的文本字符组成的;编辑器
正则表达式的元字符:ide
会被正则表达式引擎解释为特殊含义;工具
pcre——perl语言的正则表达式引擎;最完整的正则表达式引擎
基本的正则表达式:BRE
扩展的正则表达式:ERE
grep默认仅支持基本正则表达式;
egrep默认仅支持扩展正则表达式;
fgrep默认不开启正则表达式引擎;
文本字符:
只具有字符表面含义的那些字符;
经常使用选项:
-i,--ignore-case:忽略文本字符的大小写;
-v,--invert-match:反向匹配;最终显示的结果是PATTERN不能成功匹配的行;
-c,--count:计数,统计匹配PATTERN的全部的行数;
-o,--only-matching:关闭贪婪模式,仅显示PATTERN可以匹配的内容。
-q,--quiet,--silent:安静模式,不输出任何结果
--color=auto将结果高亮显示。。
-E,至关于egrep
-F,--fixed-strings,--fixed-regexp:grep -F至关于fgrep
-G,至关于grep 基本的正则表达式
-P,--Perl-regexp:使用PCRE引擎。
-A num:在显示匹配PATTERN的行的同时显示其前多少行内容,
-B num:在显示匹配PATTERN的行的同时显示其后多少行内容;
-C num:在显示匹配PATTERN的行的同时显示其先后多少行内容;
PATTERN:
正则表达式元字符:
基本的正则表达式元字符:
GLOBBING-----简化版的正则表达式:[] ? *
字符匹配:
.:匹配任意单个字符
下列全部的字符集均可以放置在[]之中用于匹配单个字符。
[]:匹配指定范围内的任意单个字符;
[^]:匹配指定范围之外的任意单个字符;
[:lower:]
[:upper:]
[:digit:]
[:alpha:]
[:space:]
[:alnum:]
[:punct:]
[:blank:]
[:xdigit:]:全部的十六进制数字;
a-z:全部的小写字母
A-Z:全部的大写字母
0-9:标识全部的十进制数字
次数匹配:该类字符以前的那个字符能够出现的次数;
*:其前面的字符能够出现任意次(0次,1次或屡次);
\?:其前面的字符无关紧要(0次或1次)。
\+:其前面的字符至少出现一次(一次或屡次)
\{m\}:其前面的字符必须出现m次。
\{m,n\}:其前面的字符至少出现m次最多出现n次。(m<n)
\{0,n\}:其前面的字符至少出现0次,至多出现n次;
\{m,\}:其前面的字符至少出现m次,×××。
在正则表达式中,表示任意长度任意字符的方式:.*
位置锚定字符:
行锚定:
行首锚定:^
行尾锚定:$
字锚定:
字首锚定:\<或者\b
字尾锚定:\>或者\b
\b:旧版本中的锚定方法,因此建议不使用;
对于正则表达式引擎来讲,字是由非特殊字符组成的连续字符串;
分组与引用字符:
\(PATTERN\):将PATTERN所匹配到的全部字符当作一个不可分割的总体来处理。
在正则表达式引擎中有一系列的内置变量,这些变量会保存全部全部分组内的字符信息,用于后向引用;这些变量依次是:\1,\2,\3.......
pattern1\(pattern2\)pattern3\(pattern4\(pattern5\)\)
\1:pattern2 第一组小括号中的pattern匹配到的字符;
\2:pattern4 第二组小括号中的pattern匹配到的字符;
\3:pattern5
或:
\|
注意:或字符将其左右两边的字符当作总体对待;
A\|americam :A 或 american
默认状况下,grep命令后面只容许一个pattern;
若是想要在一次grep所搜过程当中写多个pattern,则须要使用-e选项,每一个PATTERN前面加一个-e
将所须要的PATTERN写入到一个文件中,保证每行只有一个PATTERN,咱们就可使用-f file方式来实现多PATTERN选项。
egrep:
egrep [OPTIONS] PATTERN [FILE....]
扩展的正则表达式元字符:
字符匹配:
.
[]
[^]
次数匹配:
*
?
+
{m}
{m,n}
{m,}
{0,n}
位置锚定:
^
$
\<,\b
\>,\b
分组和引用:
()
\1,\2,\3...
或:
|
fgrep:PATTERN中全部的字符都被当作文本字符来处理;
其余的文本处理命令:
wc:
wc [OPTION] ... [FILE]...
-l:只显示行数
-w:只显示字数
-c:只显示字符数
cut:(剪辑)
可以被cut命令修改的文件通常都是具备必定结构或格式的文本文档。
cut OPTION... [FILE]...
-d, --delimiter=DELIM :指定在实施修剪操做时所依赖的分隔符,默认是空白符;
-f, --fields=LIST :根据定义的分隔符来指定字段的编号。
地址定界使用方法:
#:选择被指定的单个字段
#,#:离散的多个被指定的单个字段
#-#:连续的多个被指定的字段
--output-delimiter=STRING :指定输出分隔符
awk:
awk -F “DELIMITER” ‘[/PATTERN/]{print $1,$2.$3...$NF}’ FILE...
-F “DELIMITER”:指定字段分隔符,默认为空白字符;
$1,$2,$3....,$NF:根据字段分隔符切割出来的文本片断都存放在相应的内部变量中;
sort:sort lines of text files ,将文本文件按行继续排序,默认排序规则是按ASCII表中的字符顺序进行,这个排序标准可修改。
-r,--reverse:逆向排序
-R,--random-sort:随机排序,这种随机算法比较简陋
-u, --unique:重复出现的行只显示一行,
-n, --numeric-sort:按照数字数值大小排序。
-t, --field-separator=SEP:指定字段分隔符
-k, --key=KEYDEF:指明根据哪一个关键字段进行排序,通常和-t同时使用。
uniq:report or omit repeated lines
-d, --repeated:只显示重复出现的行,并且重复出现的行只显示一行。。
-u, --unique:只显示不重复的行。
-c, --count:在每行之前缀的方式显示重复行的重复次数;
diff:compare files line by line
同一个文件的不一样修改版本;打补丁;
patch:apply changes to files
patch [-R] [-i patchfile] [file]