正则表达式(regex)
瞄位: ^和$
^ :匹配一个输入或一行的开头,/^a/匹配”an A”,而不匹配”An a”
$ :匹配一个输入或一行的结尾,/a$/匹配”An a”,而不匹配”an A”
“^The”:表示所有以"The"开始的字符串(“There”,"The cat"等);
“Jerry$”:表示所有以"Jerry"结尾的字符串;
贪婪元字符:+ , * 与?
* :匹配前面元字符0次或多次,/ba*/将匹配b,ba,baa,baaa
+ :匹配前面元字符1次或多次,/ba*/将匹配ba,baa,baaa
? :匹配前面元字符0次或1次,/ba*/将匹配b,ba
多次匹配:
{n} :精确匹配n次;
{n,m} :匹配n-m次;
{n,} :匹配n次以上;
{,n} : 匹配0-n个;
*? 重复任意次,但尽可能少重复
+? 重复1次或更多次,但尽可能少重复
?? 重复0次或1次,但尽可能少重复
{n,m}? 重复n到m次,但尽可能少重复
{n,}? 重复n次以上,但尽可能少重复
或操作符:|
“x|y” :匹配x或y
“hi | hello”:表示一个字符串里有"hi"或者"hello";
“(b|cd)ef”:表示"bef"或"cdef";
“(a|b)*c”:表示一串"a"“b"混合的字符串后面跟一个"c”;
通用元字符:". "
如果想只匹配点,那么需要转义字符 “.” ,匹配其他元字符也一样,用转义字符就可以;
'.'可以替代除换行符之外的任何字符;
“a.[0-9]”:表示一个字符串有一个"a"后面跟着一个任意字符和一个数字;
“^.{3}$”:表示有任意三个字符的字符串(长度为3个字符);
方括号:[ ]
方括号表示某些字符允许在一个字符串中的某一特定位置出现:
“[ab]”:表示一个字符串有一个"a"或"b"(相当于"a|b");
“[a-d]”:表示一个字符串包含小写的’a’到’d’中的一个(相当于"a|b|c|d"或者"[abcd]");
“^[a-zA-Z]”:表示一个以字母开头的字符串;
“[0-9]%”:表示一个百分号前有一位的数字;
“,[a-zA-Z0-9]$”:表示一个字符串以一个逗号后面跟着一个字母或数字结束;
你也可以在方括号里用’‘表示不希望出现的字符,’'应在方括号里的第一位。(如:"%[^a-zA-Z]%"表示两个百分号中不应该出现字母)。
字符集
[xyz] :字符集(character set),匹配这个集合中的任一 一个字符(或元字符)
[^xyz] :不匹配这个集合中的任何一个字符
\b :匹配一个单词的边界
\B :匹配一个单词的非边界
\d :匹配一个字数字符,等同于[0-9]
\D :匹配一个非字数字符,等同于[^0-9]
\n :匹配一个换行符
\r :匹配一个回车符
\s :匹配一个空白字符,包括n,r,f,t,v等
\S :匹配一个非空白字符,等于/[^nfrtv]/
\t :匹配一个制表符
\v :匹配一个重直制表符
\w :匹配字母或数字或下划线或汉字,等于[a-zA-Z0-9_]
\W :匹配字母或数字或下划线或汉字以外的字符,等于[^a-zA-Z0-9_]
\x :匹配十六进制数字,等同于[0-9A-Fa-f]。
\X :匹配十六进制数字之外的任意字符,等同于[^0-9A-Fa-f]。
匹配单词
只匹配单独的单词Jerry:”< Jerry \ >“ ,这个只匹配单词两边为空白(空格、制表等)的单词,Jerry_Tom这类则匹配不到。
匹配单词开头: <
匹配单词结尾:>
搜索&替换
(搜索)命令: /正则表达式
(替换)命令: s/正则表达式/替换字符串/选项
选项可以是:i 表示不论大小写都匹配; g 表示匹配当前行中的所有匹配的字符串; d 表示删除
把所有单词help或Help都改为大写的HELP : %s/[Hh]elp/HELP/g
%表示匹配当前文档中所有行,你也可以指定部分行 1,20 s/[Hh]elp/HELP/g
使用单个空格替换一个或多个空格:%s/ \+/ /g
删除所有空行(没有任何字符,除了一个回车符)
:g/^$/d
:g/^[ tab]*[ tab]*$/d删除含有某些字符的行:g/ERROR/d
删除每行的所有的前导空格:%s/^ *//g
在文件中的每一行的开始插入->(或者其它字符):%s/^/->/
在每一行的尾部加上一个句号(或其他字符):%s/$/。/g
删除以数字开头的行 : %s/^\d.*$//g
删除以[a,b,c]开头的行 : %s/^[a|b|c].*$//g
删除重复行 : %s/^\(.*\)\n\1$/\1/g
使用\(和\)符号括起正则表达式,即可在后面使用\1、\2等变量来访问\(和\)中的内容。
例如:交换列表中所有连字符分隔的条目的顺序ABC : XYZ:%s/\(.*\):\(.*\)/\2 : \1/g
sed用法
用来直接处理文件
简单实例:
1、删除所有空行:sed ‘s/^$/d’ *.txt
2、删除所有只包含空格或者制表符的行 : sed ’ s/^[ ]*$/d’ price.txt
3、删除所有引号 : sed ‘s/"//g’ price.txt