常接触shell脚本语言的,经常会看到一个shell命令接一堆乱七八糟的option,类似这样的 sed -e "s/^[^\-]*-//" ,虽然知道那肯定是一个逻辑条件组合,但是如果不是熟悉正则表达式的人,绝对看的眼花.
这里学习记录一下正则表达式的一些基本用法.
撰写不易,转载需注明出处:http://blog.csdn.net/jscese/article/details/41645025#t7
正则表达式也叫正规表示法,就是处理字符串的方法,他是以行为单位进行字符串癿处理行为, 正则表示法透过一些特殊符号的辅助,
可以让使用者轻易的达到 搜寻 删除 取代』某特定字符串的处理程序!
以grep 摘取命令为例
grep -n ‘jscese’ test.txt
单双引号的区别在于,单引号里面的内容全当字符处理,如果里面是其它变量名,也只当作普通字符,二双引号就不同,具有引用特性
grep -n 'j[sc]ese' test.txt
grep -n ‘j[^s]cese' test.txt //取中间不是 s 的 grep -n 'j[^a-zA-Z0-9]cese test.txt //取中间不是a-z A-Z 0-9 的,只有是特殊符号的才行了 grep -n '^jscese' test.txt //代表开头 ,取以jscese开头的行
grep -v '^$' test.txt //取非空的行
grep -n 'j....e' test.txt // 其中每个 . 代表任意的一个字符 grep -n ‘j*’ test.txt // 这个会列出所有的 ,因为 * 代表重复前面的字符 0 次 或者 无数 次, 也就是可能是空
grep -n ‘js\{2,\}' test.txt // {} 需要跳脱字符转义 所以在前面加上 \
基本的规则就是上面的这些了,详细的可以去看鸟哥的私房菜,现在来看看开头的 sed -e "s/^[^\-]*-//"
这个是在envsetup,sh 中用来取源码编译类型的,lunch选取的值为 selection= full_x86-eng 的样式
通过:
local variant=$(echo -n $selection | sed -e "s/^[^\-]*-//")
“s/要被取代的部分/取代的字符串/“
可以看到 要被取代的部分为 : ^[^\-]*- 这代表从头开始,0个或者多个 非 - 的字符然后以 - 字符结尾的部分, 因为在[]中 - 具有范围的意义,所以加了跳脱字符 \
取代部分这里是空的
所以最后实际上是把 full-x86- 给剔除掉了,余下eng 赋值给 variant ,这就是工程机的编译模式.
到这里正则表达式的入门基本算是完成了,后面有机会分析sed 以及awk 的一些高级用法~
原文地址:http://blog.csdn.net/jscese/article/details/41645025