Linux正则表达式学习笔记

这周培训了 shell scripts的相关内容。预见到将来会用scripts编程处理很多log文件,所以在学scripts之前,首先学习一些regular expression相关的东西,方便接下来编程实现。


regular expression概念

简单的说,正规表示法就是处理字串的方法,他是以行为单位来进行字串的处理行为,正规表示法透过一些特殊符号的辅助,可以让使用者轻易的达到『搜寻/删除/取代』某特定字串的处理程序!
正规表示法基本上是一种『表示法』, 只要工具程序支持这种表示法,那么该工具程序就可以用来作为正规表示法的字串处理之用。 例如 vi, grep, awk ,sed 等等工具,因为她们有支持正规表示法, 所以,这些工具就可以使用正规表示法的特殊字节来进行字串的处理。但例如 cp, ls 等命令并未支持正规表示法, 所以就只能使用 bash 自己本身的万用字节而已。

————鸟哥的Linux


grep命令

在file中搜索带xxx的行,带行号输出

grep -n 'xxx' filename

搜索不带xxx的(xxx)反向

grep -vn 'xxx' filename

搜索XxX忽略大小写

grep -in 'xxx' filename

搜集合字节

grep -n 'x[xx]x' felename 

反向选择

grep -n '[^x]xx' filename

.(小数点)代表一定有一个仍以字节,可以代替任意字符。

*(星号)代表重复前一个字节。

搜寻的XX在行首

grep -n '^xx' filename

搜寻的XX在行尾部

grep -n 'xx$' filename

限定搜索范围(如2-5个o)

grep -n 'go\{2,5}g' filename

限定搜索范围(2以上)

grep -n 'go\{2,\}g' filename

sed命令

行处理工具

sed 本身也是一个管线命令,可以分析 standard input 的啦! 而且 sed 还可以将数据进行取代、删除、新增、撷取特定行等等的功能。

————鸟哥linux

d删除,a添加,c取代,p打印行, s/…/…/g搜寻取代, i直接修改内容

删除输出的2-5行

|sed '2,5d'

删除3-最后一行

|sed '3,$d'

在第2行后新增文字

|sed '2a have a nice day'

取代2-5行

|sed '2,5c have a nice day'

打印2-5行

|sed -n '2,5p'

搜寻取代

|sed 's/...../...../g'

每行以.结尾改为!

sed -i 's/\.$/\!/g' filename

在file最后一轧不过加入xxx

sed -i '$a xxx' filename

延伸正则表达式

egrep=grep -E

RE字符 意义与范例
+ 重复一个或一个以上前一个RE
在gd中搜索2个o以上
egrep -n ‘go+d’ filename
? 0个或者1个前一个RE字符
egrep -n ‘go?d’ filename

|:用或的方式找出数个字串

egrep -n 'gd|good|dog' filename

(): 找出群组字串(和/与)

egrep -n 'g(la|oo)d' filename

()+: 多个重复群组判别

echo 'AxyzxyzxyzxyzxyzC'|egrep 'A(xyz)+C'