Chinaunix

标题: 正则表达式的用法 [打印本页]

作者: TravelCloud    时间: 2012-09-14 15:30
标题: 正则表达式的用法
在shell命令中正则表达式的使用情况,

1. sed -n '/Neave/p' quote.txt
2. echo 1ab2cd3de4ef5 | awk 'BEGIN{FS="[0-9]"}{print $2 }'

这是两个命令,其中都用到了正则表达式,1是用/  /括起来,2是用“”括起来。

请问这两种方式有什么区别? 正则表达式只能用这两种方式来表示范围吗?
本人最近刚开始学习shell。学习中,请各位多指教。




作者: jiaogeshahaone    时间: 2012-09-14 15:48
1 那里有正则?
作者: Ace_kream    时间: 2012-09-14 15:53
聆听中……
作者: TravelCloud    时间: 2012-09-14 15:54
Neave是quote.txt中的一个单词。回复 2# jiaogeshahaone


   
作者: blackold    时间: 2012-09-14 15:58
回复 1# TravelCloud


    只能说,不同的地方写法也不同。
作者: TravelCloud    时间: 2012-09-14 16:22
需要经验吗?? 呵呵,我还是多潜水多看看各位高手的贴吧回复 5# blackold


   
作者: blackold    时间: 2012-09-14 16:41
回复 6# TravelCloud


    需要学习。
作者: zooyo    时间: 2012-09-14 17:16
提示: 作者被禁止或删除 内容自动屏蔽
作者: axbyc123    时间: 2012-09-14 18:32
回复 1# TravelCloud

1.匹配指定字符串;
2.FS指定的是分隔字符.
都与正则表达式没什么关系的,为什么要把它们一起比较呢?
表示范围的方法不能笼统地说有几种,因为你没指明是什么的范围.
   
作者: smallpboy    时间: 2012-09-14 20:10
awk 和egrep一样,默认就支持正则,所以'{','(','?','+'都不要'\'来转义。
sed和grep默认不支持正则,所以上面扩展的正则写法都需要'\'转义。
  1. andy@andy-ubuntu:~/test$ echo -e "111\n333\n444" | awk '/(1+)/{print}'
  2. 111
  3. andy@andy-ubuntu:~/test$ echo -e "111\n333\n444" | awk '/(11?)/{print}'
  4. 111
  5. andy@andy-ubuntu:~/test$ echo -e "111\n333\n444" | awk --posix '/1{3}/{print}'
  6. 111
复制代码
  1. andy@andy-ubuntu:~/test$ echo -e "111\n333\n444" | sed -n '/1\{3\}/p'
  2. 111
  3. andy@andy-ubuntu:~/test$ echo -e "111\n333\n444" | sed -n '/1\+/p'
  4. 111
复制代码
我擦,我写完才发现看错了你的问题。算了,也发表吧。。

作者: blackold    时间: 2012-09-14 20:16
回复 10# smallpboy


    这些从哪里学来的?
作者: 雨忆枫霏    时间: 2012-09-14 20:53
没什么区别,只是不同命令的正则表达式的表示方法不同。。。就像grep命令的正则表达式表示方式就是在引号里面。。。
作者: smallpboy    时间: 2012-09-14 21:03
google:linux/unix 工具与正则表达式的posix规范     余晟
http://www.infoq.com/cn/news/2011/07/regular-expressions-6-POSIX

回复 11# blackold


   
作者: blackold    时间: 2012-09-14 21:16
回复 13# smallpboy


    还是头一次听说
sed和grep默认不支持正则
。学习了。
作者: cjaizss    时间: 2012-09-15 13:42
TravelCloud 发表于 2012-09-14 15:30
在shell命令中正则表达式的使用情况,

1. sed -n '/Neave/p' quote.txt

........这个这个,正则表达式说白了就是字符串。

作者: TravelCloud    时间: 2012-09-16 02:06
回复 15# cjaizss

也可以写成 /Ne[a-z]ve/ 这就是正则了吧。

看前面几位的意思是这里的//和“” 都和正则没有关系,是这样吗?

   
作者: cjaizss    时间: 2012-09-16 10:31
TravelCloud 发表于 2012-09-16 02:06
回复 15# cjaizss

也可以写成 /Ne[a-z]ve/ 这就是正则了吧。

写成什么样只是应用场景的不一样而已
作者: 可恶的    时间: 2012-09-17 10:37
推荐一本regex的圣经书籍

作者: 可恶的    时间: 2012-09-17 10:37
精通正则表达式
www.amazon.cn/精通正则表达式-杰佛瑞E-F-佛瑞德/dp/B008UCHA58/ref=sr_1_1?ie=UTF8&qid=1347849389&sr=8-1
作者: blackold    时间: 2012-09-17 12:45
回复 19# 可恶的


    可恶的,哈哈
作者: 可恶的    时间: 2012-09-17 12:54
回复 20# blackold

貌似我都2年没来shell混了,对不起大家啊。
之前的工作涉及到shell的事情比较多,不少东西都在温习中。
黑哥,好久不见。
你的技术在这两年肯定提高了不少吧?

PS:那么久没来,还被黑哥记着,受宠若惊。
接下来一定好好努力,向你学习,在shell版块坚守下去,为CU尽自己的一份力。


   
作者: blackold    时间: 2012-09-17 13:00
回复 21# 可恶的


    我也是混啊。

   我们当年比较热闹 啊,所以还记得大家,还有你的名字比较特别,想记不住也难啊。


   还是坚持来shell看看。
作者: 可恶的    时间: 2012-09-17 13:10
回复 22# blackold


黑哥还是一如既往地谦逊啊:wink:
当年好热闹,一帮人都在研究shell,不知道DBA跟眼镜兄现在怎么样了。
我目前处于温习阶段,希望可以温故知新,大家共同进步
有不懂的地方,还要麻烦黑哥指点啊
作者: TravelCloud    时间: 2012-09-17 13:19
回复 19# 可恶的


    谢谢可恶的的不吝推荐,好好研究下。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2