Linux实现一些命令可以调取相关工具实现对文本的精准查找和匹配,常用的有grep、sed、awk等命令可以调取相应的工具。其中grep、sed、awk都是针对文本的行进行操作的。
1.grep命令
命令功能:是一种强大的文本搜索工具,能使用正则表达式搜索文本,然后把匹配的行显示出来。
命令格式:grep [-cinvABC] ‘word’ filename
参数说明:
-c 输出匹配的行数量
-i 搜索时忽略大小写
-h 查询多文件时不显示文件名
-l 只列出符合匹配的文件名,不列出具体匹配行
-n 列出所有匹配行,并显示行号
-s 不显示不存在或匹配文本的错误信息
-v 显示不包含匹配文本的所有行
-w 匹配整词
-x 匹配整行
-r 递归搜索,搜多当前目录及子目录
-E 支持扩展正则表达式
-F 不支持正则表达式,按照字符串的字面意思进行匹配
-A,-B ,-C:后面跟一个数字(有无空格均可),如-A2表示输出符合要求的行以及下面两行;-B2表示输出符合要求的行以及上面两行;-C2表示输出符合要求的行以及上下两行;
2. sed命令
grep工具只能进行查找,而不能实现针对查找的内容的替换,sed工具可以把替换的文本输出到屏幕上,还可以实现删除某一行的功能。
(1)sed命令的格式:sed -n ‘n’p filename
单引号里的n是一个数字,可以指定第几行;也可以是逗号连接的两个数字,指定打印的行区间;也可以是正则表达式,打印包含某个字符串的行。-n参数的作用是只显示我们要打印的行,不显示其他无关的内容。
(2)参数d表示删除的动作,可以删除指定的单行以及多行,可以都删除匹配某个字符的行,也可以删除从文档里某一行开始到最后一行的所有行。注意这个操作只是在显示屏幕上不显示而已,文档里的内容依旧ok。
删除文档里的第一行:# sed '1'd test.txt
删除文档里的第一行到第十行:# sed '1,10'd test.txt
删除文档里包含“oot”字符串的行:# sed '/oot/'d test.txt
(3)参数s表示替换动作,可以添加参数g表示本行全局替换,否则只替换本行出现的第一个。被替换字符(串)和替换字符(串)之间可以使用/或者#或者@等其他特殊字符作为分隔符。
3.awk命令
awk和sed一样,都是流式编辑器,针对文档的行进行操作。awk是一行一行执行。兼具 sed功能,而且更强大。
-F参数指定每一行的分隔符,若不加此选项,则以空格或者tab为分隔符。print是打印动作,用来打印某一个字段。$1位第一个字段,$2位第二个字段,以此类推。$0则表示的是整行。
Note:-F后面紧跟单引号,单引号里面为分隔符;print要用花括号括起来,否则会报错,print也可以打印自定义的内容,但是自定义内容要使用双引号括起来。
(1)用来匹配字符或者字符串
也可以实现某个字段去匹配,也可以多次匹配
(2)awk中可以使用逻辑符号进行判断。==,>,<,>=,<=,!=。还有&&,||表示“并且”和“或者”。
(3)awk常用的内置变量有OFS、NF、NR。OFS也是用来定义分隔符,但是是在输出时定义的,NF表示分隔符分割后总的段数,NR表示行号。