Linux Shell之十 sed与awk-Just For Fun!
设计script时,有时候需要修改脚本,例如删除或置换某些关键词。像这种在script执行过程动态修改文件的做法,称为流编辑。具有流编辑能力的工具,称为流编辑器。sed是这方面的强者。另外script执行时可能要制作报表,呈现各字段信息,awk完美解决。一、正则表达式
正则表达式是组成“样式”的基本语法,而“样式”是运用sed和awk必备的能力。sed和awk相同的运行方式是:只要符合“样式”的数据行,就对它执行指定的“操作”。
什么是正则表达式?
正则表达式是一种描述的方法,一种小型的语言,可表示某种样式或若干种样式的组合,它的威力在于仅需几个简单的字符,便可代表许多字符串共同的样子。
1、. 代表任意字符
.a. 代表中间为a,两边随意字符的3个字符。(若要对比.本身需要用\转义)
2、^ 代表在行首
^abcabd应该出现在行首。"abc,hello"和"hello abc" 前者符合后者不符合
3、$ 代表在尾部
$abcabd应该出现在行尾。"abc,hello"和"hello abc" 后者符合前者不符合
4、[...] 字符集合
[...] 代表字符 串行中的一个字符 代表a或B或c。一个大写[^A-Z]除了大写之外的一个字符。
5、*出现0个以上
a*c可以是abc、abbc、abbbc、aSJKSKBKc.....
6、\{...\}指定符合的个数
\{3,5\}前边的字符有3~5个。\{3,5\}代表以小写字母组成的字符串,长度为3~5个
7、\(..\)把对比符合的字符串暂时保存起来
a\(..\)b要保存a、b之间的2个字符,若要提取保存的字符串,可用位置参数,\1代表第一个保存的字符串,\2代表第二个保持的字符串。
二、扩展正则表达式
RE字符意义与范例
+ 重复1个或1个以上的前一个RE字符
egrep 'go+d' file 搜寻范围是 god good goood gooood......等
?0个或1个的前一个RE字符
egrep 'go?d' file 搜寻范围 god good
| 用或(or)的方式找出字符串
egrep 'g(la|oo)d file 搜寻范围 glad good
()+ 多个重复群组的判别
echo "AxyzxyzxyzxyzC" |egrep 'A(xyz)C' 意思是A开头,C结尾,中间有一个以上的"xyz"字符串的意思
注意:!在正规表达式中不是特殊字符,如果要查包含!与
页:
[1]