Linux修炼之道-文本处理三剑客(grep)

在庞大的Linux世界里,所有的交互大部分都是通过bash命令来完成,而在平时的实际开发中,没有图形化的界面,我们可能经常需要对文本进行处理,比如获取项目的配置信息,日志等操作,大部分操作我们都需要自动化来完成,而非人肉式操作,比如批量获取gz001-gz100服务器中的2018-11-25的日志,这时我们不可能通过cat、head命令来一个个查看操作,这时我们可以通过grep命令来实现我们的需求。

首先讲述一下grep是什么?

grep : 文本搜索工具,根据用户指定的‘模式对目标文件逐步进行匹配检查,打印匹配到的行

语法格式如下:

grep [-acinv] [--color=auto] '搜寻字符串' filename

-a :将 binary 文件以 text 文件的方式搜寻数据
-c :计算找到 '搜寻字符串' 的次数
-i :忽略大小写的不同,所以大小写视为相同
-n :顺便输出行号
-v :反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行!
-E : 正则匹配
--color=auto :可以将找到的关键词部分加上颜色的显示喔!

看到以上的语法,便能很直观的看到我们需要做的操作,下面我们实际应用一下:

场景A:获取env环境配置文件中的数据库密码

WX20181126-082722@2x.png

解决:根据上图我们可以看到数据库密码储存在DB_PASSWORD中,我们可以直接通过一下以下操作来实现

grep DB_PASSWORD .env

WX20181126-083008@2x.png

看到以上操作,我们便很轻松获取到了该项目的数据库密码配置,如果需要获取gz001-gz100的数据库密码,我们便可以轻松的通过grep命令来拿到,或者集成到了一个shell脚本,更轻松的完成这个需求.

写到这里,我们再横向扩展一下.

场景B:获取env环境配置文件中的包含数字的行

解决:此时我们可以利用到参数了,通过参数来实现这个需求,"-E"正则匹配便可以轻松实现.

grep -E '[0-9]+' .env

WX20181126-083854@2x.png

写到这里,我们再扩展一下:

场景C:获取env环境配置文件中非DB开头的行,并且展示出对应的行号.

解决:我们可以先通过-E正则表达式来获取到,然后通过-v取反,最后通过-n展示出对应的行号.

grep -Evn '^DB' .env

WX20181126-084801@2x.png

PS:如果文件中存在空行,也会被匹配出来.

如果我们,想要匹配不把空号显示出来,我们可以改善一下正则.

grep -Evn '^DB|^$' .env

WX20181126-085405@2x.png

小结:学习了以上的几个参数的使用,我们便可以轻松实现实际开发中,需要查找文本信息、或者匹配文本信息的需求.如有错误,尽请指出!

日记本

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!

赞赏支持
被以下专题收入,发现更多相似内容