|

楼主 |
发表于 2009-6-7 11:53:55
|
显示全部楼层
Post by orilla;1994272
sed -e 's/\"\\([^\"]*\\)\"/\\1/'
\" -- 匹配字符 "
\\ -- 匹配字符 \
[^\"]* -- 匹配非\*字符0-n个
所以,第一个表达式匹配这样的字符串,这个字符串以"\(开头,中间包含0-n个非\或者"的字符,然后后边是\)"。比如"\(orilla\)",然后将其替换为\1。实例:
- he-bash-3.2$ cat 1
- "\(orilla\)"
- orilla\\\)))***
- he-bash-3.2$ sed -e 's/"\\([^"]*\\)"/\\1/' 1
- \1
- orilla\\\)))***
复制代码
第二个没有什么问题,匹配以0个或者n个非大写字母和下划线开头,紧接着包含0个或者n个下划线或者大写字母,接下来是0个或者n个非数字字符,然后是以0个或者n个数字或者空格结尾的行。实例:
- he-bash-3.2$ cat 1
- orilla9527
- Orilla9527
- OrillA9527
- he-bash-3.2$ sed -e 's/^[^A-Z_]*[A-Z_]*[^0-9]*\([0-9]*\) *$/\1/g' 1
- 9527
- 9527
- he-bash-3.2$ sed -e 's/^[^A-Z_]*[A-Z_]*[^0-9]*\([0-9]*\) *$/22\1/g' 1
- 22
- 229527
- 229527
- 22
复制代码
注意这个正则对于任意的行是始终有匹配的,不管这一行的内容是什么,但是不一定可以捕获数据,所以这个写法我觉得不是很好。
多谢回复,有两点关于第一行代码的,我觉得\"前的\是转义字符,\\(和\\)组成有其他的意思吧? 不知道我这样想对不对 |
|