正则表达式---使用注意点
#include <stdio.h>
int main(void)
{
printf("hello\n");
printf("I am mini2440. And Wish you be a best man!\n");
return 0;
}
int main(void)
{
printf("hello\n");
printf("I am mini2440. And Wish you be a best man!\n");
return 0;
}
intintint main(void)
{
printf("hello\n");
printf("I am mini2440. And Wish you be a best man!\n");
return 0;
}
^和*的使用
^只允许在一行的开始匹配字符或单词。
比如 grep ^int hello.c
但是 grep ^* hello.c 这样结果是空
我觉得应该这样理解,^必须要给定一个指定的匹配模式,否则它不知道在每一行寻找以什么为开头的。
grep ^int*int hello.c 可以找到结果
grep ^in*t hello.c 可以找到结果
grep -r ^in*t hello.c 可以找到结果
grep ^i*t hello.c 却找不到结果??? //0到任意次的i + t 结果当然是空
grep ^*t hello.c 找不到结果??? //0到任意次的空字符 + t 结果当然是空
grep ^* hello.c 找不到结果??? //0到任意次的空(即为空)(首行) 结果当然是空
grep * hello.c 也找不到结果??? //0到任意次的空字符 结果当然是空
在群里大家的帮助下终于搞明白了,
* 表示前面字符的0到任意次重复
l* 就表示 0到任意次的l的组合
摘自鸟哥:
因为 * 代表的是『重复 0 个或多个前面的 字符』的意义, 因此,『o*』代表癿是:『拥有空字符或一个 o 以上的字符』,
特别注意,因为允讲空字符(就是有没有字符都可以的意思),因此,『 grep -n 'o*' regular_express.txt 』将会把所有的数据都打印出杢屏幕上!
那如果是『oo*』呢?则第一个 o 肯定必须要存在,第二个 o 则是可有可无的多个 o , 所以,凡是含有 o, oo, ooo, oooo 等等,都可以被列出来~
[ou] .*t
匹配以字母o或u开头,后跟任意一个字符任意次,并以t结尾的任意字母。
注意^符号的使用,当直接用在第一个括号里,意指否定或不匹配括号里内容。
[^a-zA-Z]
shell中使用 \ 或者 '' "" 输入特殊字符
grep \. 匹配.
但是在shell中敲入时,grep \\. hello.c 或者 grep ‘\.’ hello.c 或者 grep "\." hello.c
这是因为:
shell的\也是转义 如果你用grep \. hello.c
实际传入的参数是. 而不是\.
如果使用了'' 里面的表示\. 中\当字符处理了
或者\\ 已经把\当一般字符处理 故 可以传\
使用\{\}匹配模式结果出现的次数
pattern\{n\} 匹配模式出现n次。
pattern\{n,\} 匹配模式出现最少n次。
pattern\{n,m} 匹配模式出现n到m次之间,n , m为0 - 2 5 5中任意整数。
grep命令使用
http://baike.baidu.com/view/1057278.htm
学习正则表达式教程: 张子阳 写的 正则表达式