描述:
grep: Global search REgular expression and Print outthe line.
作用:文本搜索工具,根据用户指定的“模式”对目标文本逐行进行匹配检查;打印匹配到的行;
模式:由正则表达式字符及文本字符所编写的过滤条件
语法格式:grep [OPTIONS] PATTERN [FILE…]
OPTIONS(选项):
– -color=auto: 对匹配到的文本着色显示;
-v: 显示不能够被pattern 匹配到的行
-i: 忽略字符大小写
-n:显示匹配的行号
-c: 统计匹配的行数
-o: 仅显示匹配到的字符串;
-q: 静默模式,不输出任何信息
-A #: after, 后# 行
-B #: before, 前# 行
-C # :context, 前后各# 行
-e :实现多个选项间的逻辑or 关系
-w :整行匹配整个单词
-E :使用ERE(扩展正则表达式)
PATTERN(模式):结合正则表达式
正则表达式:
REGEXP :由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义,
而表示控制或通配的功能
程序支持:grep, vim, less,nginx等等
基本正则表达式:BRE
扩展正则表达式:ERE
grep -E, egrep
正则表达式引擎:采用不同算法,检查处理正则表达式的软件模块
PCRE(Perl Compatible Regular Expressions)
元字符分类:字符匹配、匹配次数、位置锚定、分组
示例:
1,查找特定字符串‘the'
[root@localhost ~]# grep -n 'the' regular_express.txt 8:I can't finish the test. 12:the symbol '*' is represented as start.
2,反向查找特定字符串’the'
[root@localhost ~]# grep -vn 'the' regular_express.txt
3,查找不论大小写的字符串'the'
[root@localhost ~]# grep -in 'the' regular_express.txt 8:I can't finish the test.
4,查找test或taste这两个单词的字符串
[root@localhost ~]# grep -n 't[ae]st' regular_express.txt 8:I can't finish the test. 9:Oh! The soup taste good.
5,查找含有'oo'字符串
[root@localhost ~]# grep -n 'oo' regular_express.txt 1:"Open Source" is a good mechanism to develop programs. 18:google is the best tools for search keyword. 19:goooooogle yes!
6,查找除a-z以外的,包含'oo’的字符
[root@localhost ~]# grep '[^a-z]oo' regular_express.txt Football game is not use feet only.
其中:[:alnum:]表示英文大小写字符及数字,即0-9,A-Z,a-z
[:alpha:]表示任何英文大小写字符,即A-Z,a-z
[:digit:]表示数字,即0-9
[:lower:]表示小写字符,即a-z
[:upper:]表示大写字符,A-Z
[:space:]表示任何空白字符
7,查找字符串'the'开头的行
[root@localhost ~]# grep '^the' regular_express.txt the symbol '*' is represented as start.
8,查找非字母开头的行
[root@localhost ~]# grep -n '^[^[:alpha:]]' regular_express.txt 1:"Open Source" is a good mechanism to develop programs. 21:# I am VBird
9,查找以.结尾的行
[root@localhost ~]# grep -n '\.$' regular_express.txt 1:"Open Source" is a good mechanism to develop programs. 2:apple is my favorite food.
10,查找空白行
[root@localhost ~]# grep -n '^$' regular_express.txt 22:
11,查找开头是g而结尾是d,中间包含两个字符串的行
[root@localhost ~]# grep -n 'g..d' regular_express.txt 1:"Open Source" is a good mechanism to develop programs. 9:Oh! The soup taste good. 16:The world <Happy> is the same with "glad".
12,查找字符串开头与结都是g,但两个g之间仅能存在至少一个o的行,即gog,goog,goooog
[root@localhost ~]# grep -n 'goo*g' regular_express.txt 18:google is the best tools for search keyword. 19:goooooogle yes!
13,查找g开头与g结尾的字符串,当中的字符可有可无,即g,gg,ggg,gggg
[root@localhost ~]# grep -n 'g*g' regular_express.txt 14:The gd software is a library for drafting programs. 19:goooooogle yes!
14,查找符合'g…g'的需求的行
[root@localhost ~]# grep -n 'g.*g' regular_express.txt 14:The gd software is a library for drafting programs. 20:go! go! Let's go.
15,查找两个o的字符串
[root@localhost ~]# grep -n 'o\{2\}' regular_express.txt 2:apple is my favorite food 19:goooooogle yes!
16,查找g后面接2到5个o,然后再接一个g的字符串
[root@localhost ~]# grep -n 'go\{2,5\}g' regular_express.txt 18:google is the best tools for search keyword.
17,查找2个o以上的字符串
[root@localhost ~]# grep -n 'go\{2,\}g' regular_express.txt 18:google is the best tools for search keyword. 19:goooooogle yes!
18,锚定单词:列出含有root的行的信息
[root@localhost ~]# grep '\<root\>' /etc/passwd root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin
egrep及扩展的正则表达式
语法格式:egrep [OPTIONS] [PATTERN] [FILE…]
egrep =grep -E
扩展正则表达式的元字符:
字符匹配:
. 任意单个字符
[ ] 指定范围内的字符
[^] 不在指定范围内的字符
次数匹配:
* 匹配前面字符任意次
? 匹配0次,1次,可有可无
+ 匹配至少一次
{m} 匹配m次
{m,n} 至少m次,至多n次
位置锚定:
^ 行首
$ 行尾
\<,\b 词首
\>,\b 词尾
分组:(), 向后引用:\1,\2,…
[root@localhost ~]# echo "11.11.12.12" |egrep "([0-9]{1,3})\.\1\.([0-9]{1,3})\.\2" 11.11.12.12
或者:a|b
示例:
1,显示用户root 或mage 或wang 的信息
[root@localhost ~]# grep -E '^(root\>|mage\>|wang\>)' /etc/passwd root:x:0:0:root:/root:/bin/bash mage:x:511:518::/home/mage:/bin/bash wang:x:512:519::/home/wang:/bin/bash
cat命令:查看文件内容
语法格式:cat [OPTION]… [FILE]…
-E: 显示行结束符$
-n: 对显示出的每一行进行 编号
-A: 显示所有控制符
-b: 非空行编号
-s: 压缩连续的空行成一行
[root@localhost ~]# cat -nE test 1He loves his lover. He likes his lover.$ 2She likes her liker. She lovers her liker.$
more命令:分页查看文件内容
语法格式:more [OPTIONS…] FILE…
-d: 显示翻页及退出提示
[root@localhost ~]# more /etc/rc.d/init.d/functions
less命令:一页一页地查看文件或STDIN 输出
/文本 搜索文本
n/N 跳到下一个或上一个匹配的结果
less 命令是man 命令使用的分页器
[root@localhost ~]# cat /etc/passwd |less
head命令:显示文本前行的内容
语法格式:head [OPTION]… [FILE]…
-c #: 指定获取前# 字节
-n #: 指定获取前#行 行
-#: 指定行数
[root@localhost ~]# head -3 /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin
tail命令:显示后行的内容
语法格式:tail [OPTION]… [FILE]…
-c #: 指定获取后# 字节
-n #: 指定获取后#行 行
-#: 指定行数
-f: 跟踪显示文件新追加的内容,常用日志监控
[root@localhost ~]# tail -f test 在另外一个终端以root用户登录,执行echo “123” >>test,即可显示结果 He loves his lover. He likes his lover. 123
cut命令:按列抽取文本内容
语法格式:cut [OPTION]… [FILE]…
-d DELIMITER: 指明分隔符,默认tab
-f FILEDS:
#: 第# 个字段
#,#[,#] :离散的多个字段,例如1,3,6
#-# :连续的多个字段, 例如1-6
混合使用:1-3,7
-c 按字符切割
–output-delimiter=STRING 指定输出分隔符
显示文件或STDIN 数据的指定列
[root@localhost ~]# cut -d: -f1,3,7 /etc/passwd 常用选项,取出用户的名字,UID和默认shell root:0:/bin/bash bin:1:/sbin/nologin
paste命令: 合并两个文件同行号的列到一行
语法格式:paste [OPTION]… [FILE]…
-d 分隔符: 指定分隔符,默认用TAB
-s : 所有行合成一行显示
wc命令:统计文本数据
[root@localhost ~]# wc /etc/fstab 12:行数 60:字数 595:字符数 /etc/fstab
-l 统计行数
-w 统计单词数
-c 统计字节数
-m 统计字符数
sort命令:文本排序(把整理过的文本显示在STDOUT),不改变原始文件
语法格式:sort [options] file(s)
-r 执行反方向(由上至下)整理
-n 执行按数字大小整理
-f 选项忽略(fold )字符串中的字符大小写
-u 选项(独特,unique )删除输出中的重复行
-t c 选项使用c 做为字段界定符
-k X 选项按照使用c 字符分隔的X 列来整理能够使用多次
示例:将/etc/rc.d/init.d/function文件按单词进行排序
[root@localhost ~]# cat /etc/rc.d/init.d/functions |tr -sc '[:alpha:]' '\n' |sort -n
uniq命令:从输入中删除重复的前后相接的行 (常和sort 命令一起配合使用)
语法格式:uniq [OPTION]… [FILE]…
-c: 统计每行重复出现的次数
-d: 显示重复过的行
-u: 仅显示不曾重复的行连续且完全相同方为重复
示例:将/etc/rc.d/init.d/function文件统计出现次数最多的单词
[root@localhost ~]# cat /etc/rc.d/init.d/functions |tr -sc '[:alpha:]' '\n' |sort |uniq -c |sort -n |tail -1 67 pid (这是CentOS 7)
[root@localhost ~]# cat /etc/rc.d/init.d/functions |tr -sc '[:alpha:]' '\n' |sort |uniq -c |sort -n |tail -1 83 if (这是CentOS 6)
diff命令:比较两个文件的不同
语法格式:diff [OPTION]… FILES
diff命令的输出被保存在一种叫做“补丁”的文件中
使用-u选项来输出“统一的(unified)”diff格式文件,最适用于补丁文件
patch命令:向文件打补丁
[root@localhost ~]# diff fstab.old fstab.new 1,2d0 表示第一行和第二行被删除了, < 表示第一行的内容 < # 表示第二行的内容 12a11,12 表示在原来的第12行后增加了两行,命令为11,12 > > new line
要结合-b选项来自动备份改变了的文件
[root@localhost ~]# echo old >old [root@localhost ~]# echo new >new [root@localhost ~]# diff -u old new >patch
[root@localhost ~]# rm -f old [root@localhost ~]# patch -b -R new patch patching file new [root@localhost ~]# cat new old [root@localhost ~]# mv new old [root@localhost ~]# cat old old
原创文章,作者:pingsky,如若转载,请注明出处:http://www.178linux.com/30112