-
正则表达式在Linux系统中用处很广
-
正则表达式功能很强大,如果能自由运用,则可以完成很多难以想象的操作
-
gvim, perl , sed 等均会使用
:%s/foo(\[^,]*\),\[^,]*\),\[^,]*\))/foo(\2,\1,\3)/g
(搜索)命令
/正则表达式
:s (替换)命令
:s/正则表达式/替换字符串/选项
元字符
| . | 匹配任意一个字符 |
|---|---|
| [abc] | 匹配方括号内中的任意一个字符。可以使用-表示字符范围 如[a-z0-9]匹配小写字母和阿拉伯数字。 |
| [^abc] | 在方括号内开头使用^符号,表示匹配除方括号中字符之外的任意字符 |
| \d | 匹配阿拉伯数字,等同于[0-9] |
| \D | 匹配阿拉伯数字之外的任意字符,等同于[^0-9] |
| \x | 匹配十六进制数字,等同于[0-9A-Fa-f] |
| \X | 匹配十六进制数字之外的任意字符,等同于[^0-9A-Fa-f] |
| \w | 匹配单词字母,等同于[0-9a-Za-z_] |
| \W | 匹配单词字母之外的任意字符,等同于[^0-9a-Za-z_] |
| \t | 匹配字符 |
| \s | 匹配空白字符,等同于[ \t] |
| \S | 匹配非空白字符,等同于[^ \t] |
特殊字符[\转义字符]
| * | 匹配*字符 |
|---|---|
| . | 匹配.字符 |
| / | 匹配/字符 |
| \ | 匹配\字符 |
| [ | 匹配[字符 |
表示数量的元字符
| * | 匹配0-任意个 |
|---|---|
| + | 匹配1-任意个 |
| ? | 匹配0-1个 |
| {n,m} | 匹配n-m个 |
| {n} | 匹配n个 |
| {n,} | 匹配n-任意个 |
| {,m} | 匹配0-m个 |
| $ | 匹配行尾 |
^ | 匹配行首(区分[^abc]) |
\< | 匹配单词词首 |
\> | 匹配单词词尾 |
- 把所有单词的help或Help都改写为大写的HELP
:%s/[Hh]elp/HELP/g - 使用单个空格替换一个或多个空格
:%s/ +/ /g
- substitute(替代) 执行的是替换;
- global执行的其他命令
- 删除所有的空行(没有任何字符,除了一个回车符)
:g/^$/d
:g/^[\t]*[\t]*$/d - 删除含有某些字符的行
:g/ERROR/d
:[range]global/{pattern}/{command}global命令在[range]指定的文本范围内(缺省为整个文件)查找{pattern},然后对匹配到的行执行命令{command},如果希望对没匹配上的行执行命令,则使用global!或vglobal命令。
- 删除每行的所有的前导空格
:%s/^ *//g - 在文件中的每一行的开始插入->(或者其它字符)
:%s/^/->/g - 在文件中的每一行的尾部插入。(或者其它字符)
:%s/$/。/g - 删除以数字开头的行
:%s/^\d.*$//g
9.删除以[a,b,c]开头的行
:%s/^[a|b|c].*$$//g
-
删除重复行
:%s/^\(.*)\n\1$/\1/g将两行重复行压缩成一行
:%s/^\(.*\)\(\n\1\)\+$/\1/g将多行重复行压缩成一行替换变量
- 使用(和)\符号括起正则表达式,即可在后面使用\1、\2等变量来访问(和)\中的内容。 例:/(a+)[^a]+\1 头和结尾处的a的个数相同的字符串, 如aabbaa,aaacccaaa,但是不匹配abbbaa
实例
- 交换列表中所有字符分隔的条目的顺序
ABC:XYZ
:%s/\(.*\):\(.\*)/\2:\1/g - 将所有方法foo(a,b,c)的实例改为foo(a,b,c)
foo(bar(8),x+y+z,5) -> foo(x+y+z,bar(8),5):%s/foo(\([^,]*\),\([^,]*\),\([^,]*\))/foo(\2,\1,\3)/g - 查找test开头的后面为一个或者多个空格,然后为一个单词。将test和这个单词调换位置
:%s/\(test\)\s\+\(\w\+\)/\2 \1/g
:5,10s/
函数式
:s/替换字符串/\函数式
例1:将各行的id字符串替换为行号
`:%s/\<id\>/\=line(".")` (\<表示词首, \>表示词尾)
- 例2:将每行开头的单词替换为(行号-10)
`:%s/^\<\w\+\>/\=(line(".")-10)`
sed用法[shell命令]
用来直接处理文件
简单示例:
1. 删除所有空行:
sed 's/^$/d' *.txt
2. 删除所有只包含空格或者制表符的行
sed 's/^[]*$/d' price.txt
3. 删除所有引号
sed 's/" //g' price.txt