免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: send_linux
打印 上一主题 下一主题

正则表达进阶大讨论!欢迎参与讨论!(获奖名单已公布-2012-7-6) [复制链接]

论坛徽章:
2
午马
日期:2015-01-27 11:22:392015年辞旧岁徽章
日期:2015-03-03 16:54:15
81 [报告]
发表于 2012-06-11 17:17 |只看该作者
回复 87# chenjintao_ii


    你能够理解 2>/dev/null 的意思么, 还有你的两处问题, 能分清是stdout和stderr么?

论坛徽章:
0
82 [报告]
发表于 2012-06-11 18:42 |只看该作者
新人一个,是来参观学习的。)

论坛徽章:
0
83 [报告]
发表于 2012-06-12 09:11 |只看该作者
to407 发表于 2012-06-11 17:17
回复 87# chenjintao_ii


”No such file or directory“是一个stderr,2>/dev/null就是将stderr输出到/dev/null设备,即不通过显示器输出。
而且stdout经过缓冲处理,所以能用grep对其内容进行二次处理。
但stderr直接输出到终端,无法再对它们的内容进行加工处理,只能将其引导到其他设备输出。所以grep -v "No such file or directory"命令对stderr无效,而2>/dev/null能达到我的目的(阻止其输出到显示屏上)。

以上是我的理解。
BR

论坛徽章:
0
84 [报告]
发表于 2012-06-12 10:20 |只看该作者
在我日常工作中使用正则表达式解决一些ngx上的一些web跳转
如:
if ($request_uri ~* "([0-9]+)-([0-9]+)_right\.html\?cid=([0-9]+)$"){
        set $fid $1;
        set $gid $3;
        rewrite (.*) /forum-$fid-1-$gid-gid.html? permanent;
}
一些处理带问号的链接

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
85 [报告]
发表于 2012-06-12 12:19 |只看该作者

以前用过 dos 的 glob 匹配,觉得那个功能很好用,后来使用 word 时,觉得它的查找替
换功能也十分便利,还支持“弱智的正则”(这是现在的看法了,当时觉得很“高级”很NB)。
随着自己对查找(匹配)的要求越来越高,就想,要是有一种更加“聪明”更加“智能”的
搜索方法该多好啊。直到有一天偶然碰上了正则表达式,“这正是自己苦苦寻找的好东西
啊”,真是相见恨晚!

正则无处不在,完全可以这样说。它是一种搜索模式,它存在于我们每天的生活中,存在
于世界的各个角落,无时无刻。

时刻离不开正则:使用 shell 命令(如 grep, sed, awk……等等)时,编辑文本时,搜索
数据时……UNIX 下的各种工具几乎到处都可见正则的倩影,一旦了解了正则的基本知识,
就会大幅度地提高效率——操作的效率和代码的效率。甚至是当你寻找某个人的时候,其实你
也是在使用正则。

比如,你曾经编辑一个文件,现在忘了存放在哪个目录了,如何快速从千万个文件中找到它?
grep! 指定恰当的正则,grep 就会快速地帮你找到你要的文件。

你想把代码中多次出现的某个函数名修改为另一个更加合适的名字,不要愚蠢地手动修改,
编辑器都有(如果没有,你还用它干吗?)支持正则的全局替换命令,一个命令就好了。

我正在用vim写这个贴子,把中文的句号(“。”)全部误写成“.”。不用担心,不用管它,
最后用一个命令:%s/\./。/g全部替换就好了。(我的文本里不需要“.”,除非用来举例的
这几个。)

应用的例子举不胜举,但万变不离其宗,本质就是匹配(查找)。

不同的工具所支持的正则(正则引擎)也有所不同。大体上说,大同小异。

最好先易后难,从学习比较简单的 POSIX BRE 和 POSIX ERE 开始, 通过grep学习基本的
正则,对正则有一个基本的感性认识。

掌握了正则的基础后,再学习其它工具的正则就显得简单容易多了。不过,碰到问题时你
还是要参考相应工具的手册,也许该工具有本身的正则扩展或比较特殊的功能。要精通正
则,还需要不断地努力。

Perl 应该是正则之王。如果你喜欢正则,想体验正则的强悍,那你不能不了解 Perl。

论坛徽章:
2
午马
日期:2015-01-27 11:22:392015年辞旧岁徽章
日期:2015-03-03 16:54:15
86 [报告]
发表于 2012-06-12 14:00 |只看该作者
回复 90# chenjintao_ii


    恩 还有一个小地方,就是 pipe+grep 处理的是pipe前面一段命令的stdout,这跟是否有缓存没什么关系,grep在这边就是接着管道的 所以grep只是在处理前面的stdout。


你可以自己拿一个例子来试, cd到一个空目录下面。
想想 下面几处grep有什么不一样的结果 就明白了。

  1. # alias grep='grep --color=auto'
  2. # LANG=
  3. # ls bb |grep "DD"
  4. # ls bb |grep "bb"
  5. # ls bb 2>&1|grep "bb"
复制代码

论坛徽章:
0
87 [报告]
发表于 2012-06-12 14:44 |只看该作者
回复 93# to407


    换句话说:
ls bb命令会蹦出“No such file or directory”的提示
ls bb 2>/dev/null 提示消失
ls bb |grep -v "No such file or directory"提示不消失,因为管道处理不了stderr的输出
ls bb 2>&1 |grep -v "No such file or directory" 提示消失,stderr重定向到stdout,管道能处理了

你分析得很透彻,非常感谢。

论坛徽章:
2
午马
日期:2015-01-27 11:22:392015年辞旧岁徽章
日期:2015-03-03 16:54:15
88 [报告]
发表于 2012-06-12 15:13 |只看该作者
回复 94# chenjintao_ii


    great :wink:

论坛徽章:
0
89 [报告]
发表于 2012-06-12 15:25 |只看该作者
1、在你的日常工作中会使用正则表达式解决什么样的问题?
主要是对日志进行分析,匹配出自己需要的字段
2、正则表达式的用法在各个语言、脚本里面略有不同,你有什么学习经验可以分享给初学者?
只了解shell,没什么经验,只是每写一次脚本都会有一定的收获,写的越多,得到的也越多

论坛徽章:
59
2015七夕节徽章
日期:2015-08-24 11:17:25ChinaUnix专家徽章
日期:2015-07-20 09:19:30每周论坛发贴之星
日期:2015-07-20 09:19:42ChinaUnix元老
日期:2015-07-20 11:04:38荣誉版主
日期:2015-07-20 11:05:19巳蛇
日期:2015-07-20 11:05:26CU十二周年纪念徽章
日期:2015-07-20 11:05:27IT运维版块每日发帖之星
日期:2015-07-20 11:05:34操作系统版块每日发帖之星
日期:2015-07-20 11:05:36程序设计版块每日发帖之星
日期:2015-07-20 11:05:40数据库技术版块每日发帖之星
日期:2015-07-20 11:05:432015年辞旧岁徽章
日期:2015-07-20 11:05:44
90 [报告]
发表于 2012-06-12 22:09 |只看该作者
1、在你的日常工作中会使用正则表达式解决什么样的问题?

我在工作中主要是用正在表达式的地方在:Shell中用于文件内容的处理,Javascript中用于Web页面内容的校验(如Email,电话,邮政编码等等),以及在PHP中使用正则表达式。在Java中也会用到一些。
2、正则表达式的用法在各个语言、脚本里面略有不同,你有什么学习经验可以分享给初学者?

我对于正则表达式的学习,不管是在那个语言中使用,首先要把正则表达式的核心部分学习好,我经常看的是《30分钟学习正在表达式》,至于在各个语言和脚本中的差别,就得参考各种语言脚本的手册来使用就OK了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP