免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
1234下一页
最近访问板块 发新帖
查看: 6323 | 回复: 32
打印 上一主题 下一主题

[文本处理] 请教正则表达式问题 [复制链接]

论坛徽章:
15
CU大牛徽章
日期:2013-03-13 15:32:35白羊座
日期:2013-10-30 13:11:16未羊
日期:2013-11-29 10:47:02白羊座
日期:2014-01-22 11:34:25白羊座
日期:2014-03-04 11:05:50申猴
日期:2014-07-29 16:31:36天秤座
日期:2013-10-23 15:33:47未羊
日期:2013-10-09 09:18:53CU大牛徽章
日期:2013-03-13 15:38:15CU大牛徽章
日期:2013-03-13 15:38:52CU大牛徽章
日期:2013-03-14 14:08:55未羊
日期:2013-09-23 09:29:22
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-10-15 14:13 |只看该作者 |倒序浏览
文件内容: This is the (first) line

正则表达式:\([^)]*\),书本上说匹配第一个括号之前的内容,匹配This is the,但我感觉怎么是匹配This is the (first。

[^)]*:匹配不为)的任意字符,是不是这样的?

论坛徽章:
5
未羊
日期:2014-08-04 16:15:21天秤座
日期:2014-08-13 13:52:372015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:112015亚冠之浦和红钻
日期:2015-06-29 15:30:48
2 [报告]
发表于 2013-10-15 14:17 |只看该作者
自己试验呗~~~书上写的就都对???

论坛徽章:
15
CU大牛徽章
日期:2013-03-13 15:32:35白羊座
日期:2013-10-30 13:11:16未羊
日期:2013-11-29 10:47:02白羊座
日期:2014-01-22 11:34:25白羊座
日期:2014-03-04 11:05:50申猴
日期:2014-07-29 16:31:36天秤座
日期:2013-10-23 15:33:47未羊
日期:2013-10-09 09:18:53CU大牛徽章
日期:2013-03-13 15:38:15CU大牛徽章
日期:2013-03-13 15:38:52CU大牛徽章
日期:2013-03-14 14:08:55未羊
日期:2013-09-23 09:29:22
3 [报告]
发表于 2013-10-15 14:24 |只看该作者
回复 2# dn833

实验结果书本是对的,不知道原因,求解释!
   

论坛徽章:
36
摩羯座
日期:2013-09-23 16:37:312015年亚洲杯之沙特阿拉伯
日期:2015-04-14 09:10:172015亚冠之柏太阳神
日期:2015-06-25 08:48:212015亚冠之武里南联
日期:2015-07-28 09:01:082015亚冠之莱赫维亚
日期:2015-07-28 15:44:172015亚冠之柏斯波利斯
日期:2015-09-06 14:08:52白银圣斗士
日期:2015-11-25 17:06:2815-16赛季CBA联赛之吉林
日期:2015-12-09 16:59:072016猴年福章徽章
日期:2016-02-18 15:30:3415-16赛季CBA联赛之辽宁
日期:2016-04-14 09:29:04luobin
日期:2016-06-17 17:46:3615-16赛季CBA联赛之天津
日期:2016-08-16 14:11:01
4 [报告]
发表于 2013-10-15 14:25 |只看该作者
能发个完整的语句吗?

论坛徽章:
14
15-16赛季CBA联赛之辽宁
日期:2019-06-16 15:47:3515-16赛季CBA联赛之广夏
日期:2016-08-13 21:24:352015亚冠之武里南联
日期:2015-07-07 17:37:372015亚冠之萨济拖拉机
日期:2015-07-06 17:07:482015亚冠之全北现代
日期:2015-06-04 13:54:272015亚冠之城南
日期:2015-05-21 15:43:212015年亚洲杯之伊朗
日期:2015-04-25 18:20:362015年亚洲杯之伊朗
日期:2015-04-20 16:06:052015年亚洲杯之科威特
日期:2015-03-07 12:51:26丑牛
日期:2014-12-30 10:26:38申猴
日期:2014-09-28 22:40:18金牛座
日期:2014-09-13 21:12:22
5 [报告]
发表于 2013-10-15 14:26 |只看该作者
echo  "This is the (first) line"| grep -o  "\([^)]*\)"
This is the (first   

亲测显示如上。

论坛徽章:
15
CU大牛徽章
日期:2013-03-13 15:32:35白羊座
日期:2013-10-30 13:11:16未羊
日期:2013-11-29 10:47:02白羊座
日期:2014-01-22 11:34:25白羊座
日期:2014-03-04 11:05:50申猴
日期:2014-07-29 16:31:36天秤座
日期:2013-10-23 15:33:47未羊
日期:2013-10-09 09:18:53CU大牛徽章
日期:2013-03-13 15:38:15CU大牛徽章
日期:2013-03-13 15:38:52CU大牛徽章
日期:2013-03-14 14:08:55未羊
日期:2013-09-23 09:29:22
6 [报告]
发表于 2013-10-15 14:29 |只看该作者
自我理解下:

\(,设定(为特殊字符,可以看成分隔符,把原文件分为: This is the 和 first)line,然后找出没有)的那部分,但是\)在这里改如何理解?

论坛徽章:
15
CU大牛徽章
日期:2013-03-13 15:32:35白羊座
日期:2013-10-30 13:11:16未羊
日期:2013-11-29 10:47:02白羊座
日期:2014-01-22 11:34:25白羊座
日期:2014-03-04 11:05:50申猴
日期:2014-07-29 16:31:36天秤座
日期:2013-10-23 15:33:47未羊
日期:2013-10-09 09:18:53CU大牛徽章
日期:2013-03-13 15:38:15CU大牛徽章
日期:2013-03-13 15:38:52CU大牛徽章
日期:2013-03-14 14:08:55未羊
日期:2013-09-23 09:29:22
7 [报告]
发表于 2013-10-15 14:33 |只看该作者
书本上内容摘录:

textfile内容为
This is the (first) line
This is (the) (second) line

命令:sed –ne ‘:lbtest /\([^)]*\)\(([^)]*)\)\(.*\)/{s//\1\***\3/g;b lbtest};p’ textfile

这个命令的意思是将(first)这样的形式,就是括号的内容(包括括号)替换为“***”,地址addr “/\([^)]*\)\(([^)]*)\)\(.*\)/”匹配的是带有(first)这样的形式的行,可以有多个;这里的正则表达式“/\([^)]*\)\(([^)]*)\)\(.*\)/”分三部分,第一部分“\([^)]*\)”表示的是第一个括号之前的内容,比如上面的textfile的第二行的“This is ”;第二部分“\(([^)]*)\)”表示当前数据行的第一个带有括号的内容,比如上面的textfile的第二行的“(the)”;第三部分“\(.*\)”表示的是第一个括号后的内容,比如上面的textfile的第二行的“ (second) line ”;

论坛徽章:
15
CU大牛徽章
日期:2013-03-13 15:32:35白羊座
日期:2013-10-30 13:11:16未羊
日期:2013-11-29 10:47:02白羊座
日期:2014-01-22 11:34:25白羊座
日期:2014-03-04 11:05:50申猴
日期:2014-07-29 16:31:36天秤座
日期:2013-10-23 15:33:47未羊
日期:2013-10-09 09:18:53CU大牛徽章
日期:2013-03-13 15:38:15CU大牛徽章
日期:2013-03-13 15:38:52CU大牛徽章
日期:2013-03-14 14:08:55未羊
日期:2013-09-23 09:29:22
8 [报告]
发表于 2013-10-15 14:35 |只看该作者
回复 5# reb00t

多谢测试,我只是用课本上的例子试了下,这下又掌握了grep -o参数。:wink:
   

论坛徽章:
50
15-16赛季CBA联赛之广夏
日期:2018-11-05 09:42:462015年亚冠纪念徽章
日期:2015-07-23 11:58:122015亚冠之广州富力
日期:2015-07-07 08:26:172015亚冠之塔什干棉农
日期:2015-06-29 09:08:072015年亚洲杯之伊朗
日期:2015-03-08 20:51:012015年迎新春徽章
日期:2015-03-04 09:58:11未羊
日期:2014-10-16 22:41:47处女座
日期:2014-10-16 15:33:33酉鸡
日期:2014-03-13 12:54:10巳蛇
日期:2014-03-10 14:39:052015亚冠之德黑兰石油
日期:2015-07-29 12:46:372015亚冠之德黑兰石油
日期:2015-08-07 12:54:11
9 [报告]
发表于 2013-10-15 14:37 |只看该作者
yzkarchive 发表于 2013-10-15 14:13
文件内容: This is the (first) line

正则表达式:\([^)]*\),书本上说匹配第一个括号之前的内容,匹配 ...


可以匹配第1个)之前的内容:
  1. echo 'This is the (first) line This is the (first) line'|sed 's/\([^)]*\).*/\1/'         
  2. This is the (first
复制代码

论坛徽章:
15
CU大牛徽章
日期:2013-03-13 15:32:35白羊座
日期:2013-10-30 13:11:16未羊
日期:2013-11-29 10:47:02白羊座
日期:2014-01-22 11:34:25白羊座
日期:2014-03-04 11:05:50申猴
日期:2014-07-29 16:31:36天秤座
日期:2013-10-23 15:33:47未羊
日期:2013-10-09 09:18:53CU大牛徽章
日期:2013-03-13 15:38:15CU大牛徽章
日期:2013-03-13 15:38:52CU大牛徽章
日期:2013-03-14 14:08:55未羊
日期:2013-09-23 09:29:22
10 [报告]
发表于 2013-10-15 14:48 |只看该作者
回复 9# WilliBhamlll

那书本上说的第一部分”“\([^)]*\)”表示的是第一个括号之前的内容,比如上面的textfile的第二行的“This is“是错误的?

为什么在输出的时候"s//\1\***\3/g"仅仅输出了This is the?
   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP