转自:https://www.cnblogs.com/sheeva/p/6406285.html
作为一个偏爱windows的程序员,以前做文本处理的时候总是喜欢在windows下用notepad++等图形化工具处理,比如有时需要把linux服务器上一个文件进行一次全局字符串替换这样简单的操作,还得把文件down到本地编辑好再传回去。这两天买了本《鸟哥的Linux私房菜》,终于静下心系统的学习了一下linux下的文本处理,感觉其实没有想象的难,如果早点学会节约下来的大量时间肯定远超过学习所花的时间。
先说一下本文要介绍的内容:
简单回顾一下正则表达式,如果熟悉正则,至少知道正则分为基本正则和扩展正则可以跳过该部分。
本文主体:介绍4个linux文本处理命令:grep、sed、printf、awk。
下面正式开始。
这部分是给会正则表达式的读者简单回顾一下正则表达式,如果没学过正则表达式的读者建议先找相关资料学习正则表达式再来看本文。
正则表达式分为基本正则表达式和扩展正则表达式,内容如下:
正则表达式字符
含义
^word
查找以word开头的文本
word$
查找以word结尾的文本
代表一个任意字符
转义符
0到多个字符
[abc]
代表一个字符,这个字符是a或b或c
[a-z];[0-9]
代表a到z中的一个字符;0到9中的一个数字
[^abc]
代表一个非a、b、c的字符
{m,n}
m到n个字符
正则表达式字符
含义
一个或多个字符
零个或一个字符
或者
分组
grep的作用是按行查找字符,输出包含字符的行。
grep用法:
grep一般有两种用法,一种是从文件查找,一种是从管道的输入查找,
grep 'word' file.txt
cat file.txt|grep 'word'
grep的常用参数:
参数
含义及示例
输出结果加行号
--color=auto
匹配的关键字高亮显示
输出匹配行的后三行
-B2
输出匹配行的前两行
-v
反向查找,即输出不包含关键字的行
关键字匹配时忽略关键字大小写
grep使用小技巧:
多数情况我们都想要高亮关键词(使用--color=auto参数),因此可以在~/.bashrc文件中添加上:
alias grep='grep --color=auto'
,再用
source ~/.bashrc
让配置生效。这样当我们使用grep的时候,就自动带了--color=auto参数。
grep使用示例:
grep的查找主要就是基于基本正则表达式的匹配,下面只是简单的给一些常用例子供参考。
grep 't[ae]st'//查找tast或test
grep '[0-9]' //查找数字
grep '[^a-z]oo'//查找Xoo,其中X是一个非a到z的字符
grep '^the'//查找以the开头的字符,这里注意区分^出现在[]里时代表“非某字符”,如上个例子,出现在[]外时代表"以某字符开头",如这个例子。
grep '^$'//查找空行
grep 'o\{2\}'//查找两个o,这里需要注意,{}在shell里有特殊意义,因此需要转义,这里与一般的正则使用不同,需要注意。
egrep:
我们知道正则表达式分为基本正则表达式和扩展正则表达式,但是grep只支持基本正则表达式,如果要是用扩展正则表达式,需要使用egrep命令。
几个例子:
egrep 'gd|good'//查找gd或good
egrep 'g(la|oo)d'//查找glad或good
egrep 'A(xyz)+C'//查找AXC,其中X是一个或一个以上的'xyz'字符串。