这周培训了 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'