Linux上文本三剑客分别是grep、sed和awk。grep是文本过滤工具(egrep,fgrep);sed是文本编辑工具;awk是文本报告生成器。
正则表达式,由一类特殊字符及文本所编写的模式,其中有些字符不表示其字面意义,而是用于表示控制或通配的功能;分别为基本正则表达式(BRE)和扩展正则表达式(ERE)。
grep
Global search Regular expression and Print out the line.
作用:文本搜索工具,根据用户指定的“模式(过滤操作)”对目标文本逐行进行匹配检查;打印匹配到的行。
模式:有正则表达式的元字符及文本字符所编写出的过滤条件。
-
grep
-
用法:
-
grep [OPTIONS] PATTERN [FILE...] grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]
-
-
参数:
-
--color = auto:对匹配到的文本着色后高亮显示
-
-i:ignorance,忽略字符的大小写
-
-o:仅显示搜索到的字符串本身
-
-v,--invert-match:显示不能被匹配到的行
-
-E:支持使用扩展到正则表达式元字符
-
-q,--quiet,--silent:
-
-A#:after,显示查找目标文本的后#行
-
-B#:before,显示查找目标文本的前#行
-
-C#:context,显示查找目标文本的前后#行
-
-
egrep
支持扩展的正则表达式实现类似于grep文本过滤功能;相当于grep -E
fgrep
不支持正则表达式元字符,当无需用到元字符去编写模式时,使用fgrep必能更好
基本正则表达式元字符
基本正则表达元字符分为字符匹配、匹配次数、位置锚定、分组及引用。
-
字符匹配:
-
.:匹配单个字符
[root@cui ~]# grep "r..t" /etc/passwd root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin # r/ft
-
[]:匹配指定范围内的任意单个字符
-
[^]:匹配指定范围外的任意单个字符
-
[:upper:]:所有大写字母
-
[:lower:]:所有小写字母
-
[:alpha:]:所有字母
-
[:digit:]:所有数字
-
[:alnum:]:所有的字母和数字
-
[:space:]:所有空白字符
-
[:punct:]:所有标点符号
## 匹配两个字母 [root@cui ~]# grep "r[[:alpha:]][[:alpha:]]t" /etc/passwd root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin [root@cui ~]#
-
-
-
匹配次数:用在要指定其出现的次数的字符的后面,用于限制其前面字符出现的次数:
-
*:匹配其前面的字符任意次
-
.*:匹配任意长度的任意字符
-
\?:匹配其前面的字符0次或1次;即前面的字符是可有可无的
-
\+:匹配其前面的字符1次或多次l;即前面的字符至少出现一次
-
\{m\}:匹配其前面的字符m次
-
\{m,n\}:匹配前面的字符至少m次,至多n次
-
\{0,n\}:至多n次
-
\{m,\}:至少m次
-
-
-
位置锚定:
-
^:行首锚定;用于模式的最左侧
-
$:行尾锚定;用于模式的最右侧
-
^PATTERN$:用PASTTERN来匹配整行
-
^$:空白行;不能出现字符
-
^[[:space:]]$:空白或包括空白字符的行
-
-
单词:非特殊字符组成的连续字符(字符串)都称为单词
-
\<或\b:词首锚定,用于单词的左侧
-
\>或\b:词尾锚定,用于单词模式的右侧;
-
\<PATTERN\>:匹配完整的单词
-
-
-
分组及引用
-
\(\):将一个或多个字符捆绑在一起,当作一个整体进行处理
[root@cui ~]# grep "\(ab\)" cui.txt aaab aaab adddbaababaaab
-
Note:分组括号中的模式匹配到的内容会被正则表达式引擎自动记录于内部的变量中,这些变量为:
-
\1:模式从左侧起,第一个左括号以及之匹配的右括号之间的模式所匹配的字符;
-
\2:模式从左侧起,第二个左括号以及之匹配的右括号之间的模式所匹配的字符;
-
\3:模式从左侧起,第三个左括号以及之匹配的右括号之间的模式所匹配的字符;
-
...
[root@cui ~]# grep "l..e.*l..e" cui.txt he loves his lover he likes his lover She likes her liker She loves her liker [root@cui ~]# grep "\(l..e\).*\1" cui.txt he loves his lover She likes her liker
-
-
文本查看及处理工具
wc、cut、sort、uniq、diff、patch
-
wc:word count(单词统计)
-
用法:
-
wc [OPTION]... [FILE]...
-
wc [OPTION]... --files0-from=F
-
-
参数:
-
-l:lines,仅显示行数
-
-w:words,仅显示行数
-
-c:bytes,仅显示字节数
-
-
-
cut:文本截取工具
cut 命令 用来显示行中的指定部分,删除文件中指定字段
-
用法:
-
cut OPTION... [FILE]...
-
-
参数:
-
-d, --delimiter=DELIM:仅显示行中指定直接范围的内容
-
-f, --fields=LIST:挑选出的字段
-
#:单个字段
-
#-#:连续的多个字段
-
#,#:离散的多个字段
-
-
-complement:补足被选择的字节、字符或字段;
-
-
实例:
[root@cui ~]# cat 1.txt No Name Mark Percent 01 tom 69 91 02 jack 71 87 03 alex 68 98 No,Name,Mark,Percent 0000 04,tommm,693,9155 0001 05,jackkk,714,8755 002 06,alexxx,685,9855 003
显示以空格为分隔符的第2个字段
[root@cui ~]# cut -d\ -f 2 1.txt Name tom jack alex 0000 0001 002 003
显示以空格为分隔符的第2-3列的字段
[root@cui ~]# cut -d\ -f 2-3 1.txt Name Mark tom 69 jack 71 alex 68 0000 0001 002 003
显示以“,”为分隔符的第2,3,4列 的字段
[root@cui ~]# cut -d, -f 2,3,4 1.txt No Name Mark Percent 01 tom 69 91 02 jack 71 87 03 alex 68 98 Name,Mark,Percent 0000 tommm,693,9155 0001 jackkk,714,8755 002 alexxx,685,9855 003
显示除第2,3,4列的的字段
[root@cui ~]# cut -d, -f 2,3,4 --complement 1.txt No Name Mark Percent 01 tom 69 91 02 jack 71 87 03 alex 68 98 No 04 05 06
-
-
sort:对文本文件中所有行进行排序。
-
用法:
-
sort [OPTION]... [FILE]...
-
-
参数
-
-n, --numeric-sort:根据数字排序
-
-t, --field-separator=SEP:使用SEP作为列的分隔符。
-
-k, --key=KEYDEF:通过一个key排序;KEYDEF给出位置和类型
-
-r, --reverse:将结果倒序排列
-
-f, --ignore-case:忽略大小写
-
--u, --unique:同时使用-c,严格检查排序;不同时使用-c,输出排序后去重的结
-
-
-
uniq:显示或忽略重复的行。
-
用法:
-
uniq [OPTION]... [INPUT [OUTPUT]]
-
-
参数:
-
-c, --count:在每行开头增加重复次数
-
-u, --unique:仅显示未曾重复的行
-
-d, --repeated:显示重复过的行
-
-
-
diff:比较给定的两个文件的不同
-
用法:
-
diff(选项)(参数) 文件1 文件2
-
-
参数:
-
-u,-U<列数>或--unified=<列数>:以合并的方式来显示文件内容的不同;
-
-
生成补丁
-
[root@cui ~]# diff /PATH/TO/OLDFILE /PATH/TO/NEWFILE > /PATH/TO/PATCH_FILE
-
-
-
patch:为开放源代码软件安装补丁程序
patch命令 被用于为开放源代码软件安装补丁程序。让用户利用设置修补文件的方式,修改,更新原始文件。如果一次仅修改一个文件,可直接在命令列中下达指令依序执行
-
打补丁:
-
path [OPTIONS] -i 补丁文件 目标文件
-
path 目标文件 < 补丁文件
-
-