关于正则表达式里的“+”和“-”二个选项

sh/bash/dash/ksh/zsh等Shell脚本
回复
头像
maonx
帖子: 206
注册时间: 2008-09-09 16:39
联系:

关于正则表达式里的“+”和“-”二个选项

#1

帖子 maonx » 2008-10-19 21:55

下面的实例,但我照它的输入,出不来结果,就是说“+,-"二个号我用在GREP 里面没有效果,“*”是可以的

**************************
实例:
问号
另一个重复操作符是问号 (?)。问号的功能与星号类似,只不过搜索项可以出现零次或一次。
多个实例将不匹配。使用问号取代星号来尝试您刚才执行的搜索:
grep go?lf grep.txt
可以看到,这次作为匹配结果返回了 golf 和 glf,但是没有返回 goolf,
因为其中存在问号前的搜索项 o 的多个实例:
I like golf.
This time the o is missing in glf.
加号
最后一个常规重复操作符是加号 (+)。加号将查找某个搜索项出现一次或多次的情况。
与星号不同,必须至少找到一个实例才会匹配。请尝试以下示例:
grep go+lf grep.txt
这次,该搜索返回 golf 和 goolf,但它不返回 glf,因为没有找到 o:
I like golf.
Some people might say goolf.
头像
bones7456
帖子: 8495
注册时间: 2006-04-12 20:05
来自: 杭州
联系:

Re: 关于正则表达式里的“+”和“-”二个选项

#2

帖子 bones7456 » 2008-10-19 21:58

把你的命令和结果完整地发上来
关注我的blog: ε==3
头像
xiooli
帖子: 6956
注册时间: 2007-11-19 21:51
来自: 成都
联系:

Re: 关于正则表达式里的“+”和“-”二个选项

#3

帖子 xiooli » 2008-10-19 22:08

我记得在sed里面要用\+,你试试看。
头像
goodluck1982
帖子: 171
注册时间: 2007-07-05 2:48

Re: 关于正则表达式里的“+”和“-”二个选项

#4

帖子 goodluck1982 » 2008-10-19 22:44

要知道, sed, awk, grep, vim, emacs, find 等都支持正则表达式
但是
具体的细节是有区别的
象+,?,(,)等有的就需要加\,有的就不需要
很容易弄混的
反正我现在也懒得记了
用之前试一下就行了
头像
HuntXu
帖子: 5776
注册时间: 2007-09-29 3:09

Re: 关于正则表达式里的“+”和“-”二个选项

#5

帖子 HuntXu » 2008-10-20 2:35

grep -E

看图,顺道测试了"*"...额,那个"-"选项正则里表示什么,没见过... :em20
附件
2008-10-20-024233_644x412_scrot.png
HUNT Unfortunately No Talent...
头像
cnkilior
论坛版主
帖子: 4984
注册时间: 2007-08-05 17:40

Re: 关于正则表达式里的“+”和“-”二个选项

#6

帖子 cnkilior » 2008-10-20 8:30

较为详细的正则表达式的讲解是在《sed&awk》奥莱利出版社!
头像
qqttdh
帖子: 896
注册时间: 2007-07-20 22:15

Re: 关于正则表达式里的“+”和“-”二个选项

#7

帖子 qqttdh » 2008-10-20 10:02

:em26
头像
maonx
帖子: 206
注册时间: 2008-09-09 16:39
联系:

Re: 关于正则表达式里的“+”和“-”二个选项

#8

帖子 maonx » 2008-10-20 23:12

好多代码,
grep.txt:
I like golf.
Golf is played on grass.
I created gilf.
What is g2lf?
This time the o is missing in glf.
Some people might say goolf.
But they would not say goilf.

然后分别用 * , ?,+号去试
星号

要试验的下一个特殊字符是星号 (*),它是若干个重复操作符之一。大多数人都非常熟悉在命令行上使用星号

作为文件名搜索条件(通配符),但是在正则表达式中使用星号还是相当新鲜的。星号指示搜索项

(前一个字符或方括号表达式)可以出现零次、一次或多次。若要对此进行尝试,请将以下行添加到您已经在使用的 grep.txt 文件:


尝试在 golf 中的 o 后面使用星号:

grep go*lf grep.txt



您的搜索将返回具有单词 golf、glf 和 goolf 的行:

I like golf.
This time the o is missing in glf.
Some people might say goolf.



问号

另一个重复操作符是问号 (?)。问号的功能与星号类似,只不过搜索项可以出现零次或一次。

多个实例将不匹配。使用问号取代星号来尝试您刚才执行的搜索:

grep go?lf grep.txt



可以看到,这次作为匹配结果返回了 golf 和 glf,但是没有返回 goolf,

因为其中存在问号前的搜索项 o 的多个实例:

I like golf.
This time the o is missing in glf.




加号

最后一个常规重复操作符是加号 (+)。加号将查找某个搜索项出现一次或多次的情况。

与星号不同,必须至少找到一个实例才会匹配。请尝试以下示例:

grep go+lf grep.txt



这次,该搜索返回 golf 和 goolf,但它不返回 glf,因为没有找到 o:

I like golf.
Some people might say goolf.

*号的测试结果正常,另外的两个符号的测试结果为空
头像
mawith
帖子: 1288
注册时间: 2007-10-21 16:41
来自: GD

Re: 关于正则表达式里的“+”和“-”二个选项

#9

帖子 mawith » 2008-10-21 3:18

太多了。。保存慢慢看
吼吼
头像
maonx
帖子: 206
注册时间: 2008-09-09 16:39
联系:

Re: 关于正则表达式里的“+”和“-”二个选项

#10

帖子 maonx » 2008-10-21 8:53

HuntXu 写了:grep -E

看图,顺道测试了"*"...额,那个"-"选项正则里表示什么,没见过... :em20


嗯,测试了,加上 -E 后就成果了,问题解决

grep -E
回复