文件通配符和正则表达式
文本过滤工具grep
Linux系统中,一切皆文件。强大的文本编辑和处理工具便必不可少了,在Linux系统中,有文本处理三剑客:grep,sed,awk。
在进行介绍三大工具前,我们先总结一下文件通配符和正则表达式。文件通配符主要就是对文件的查找进行文件名的模糊查询,而正则表达式是对文件内的文本进行查找和匹配,之后交给工具去处理。他们的主要区别如下:
文本过滤工具grep
grep(global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来.
grep的主要参数如下:
示例
在Centos7中,定义了别名:grep= "grep --color=auto“,所以我们使用grep是搜索的关键字会高亮显示。
我们想要找到/etc/passwd文件内的全部全部root,我们可以使用grep ‘root’ /etc/passwd 这条命令实现。效果如下:
想要过滤的信息被高亮显示了。
grep使用格式
grep 【选项】 想要过滤的单词或正则表达式 文件名,下面一张图详解grep命令的使用格式。
一般一条命令分为这四部分,我们还想要进一步处理的话,可以接管道,继续处理文本内容,当然内容部分我们可以使用正则表达式去表示,这正是他们的强大之处。
下面我们来看具体参数的应用,首先是 -v 反向搜索,也就是说,我们可以把过滤到的内容不显示出来,而显示那些没被过滤到的内容,具体如下:
我们清晰的看到,这两条命令加起来的内容就是passwd文档全部内容了。
下面看一下 -n 选项的效果,这个选项的功能是将匹配到的内容的行号显示出来,效果如下图:
-c 选项会只显示匹配到了几行内容,不显示具体匹配的内容:
-o 选项只显示皮ip诶到的字符串,这样方便我们复制给变量 :
-q 是静默输出,也就是说什么也不显示,但命令的返回值是成功,也就是说我们不想要看到结果时,便可以用这个选项。
-e 支持两个条件同时过滤 :
grep -E = egrep 这个是使用扩展正则表达式来过滤想要的内容。
grep还有很多选项,这里就不一一列举了,大家可根据文章开头的选项简介和系统自带的man手册查看具体的功能和参数。
sed是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用,功能不同凡响。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。
参数
动作列表:
动作示例:
a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)
c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行
d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚
i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行
p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行
s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法
sed还有高级用法
示例
sed '1!G;h;$!d' FILE逆向显示文件内容