免费注册 查看新帖 |

Chinaunix

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

[文本处理] sed删除特殊匹配的行,求解决办法?? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-07-07 14:34 |只看该作者 |倒序浏览
我的文本data.txt如下所示。
  1. SP90 alpha inhibitor
  2. Heat shock protein; HH SP90 alpha inhibitor
  3. Heat shock protein; HH-SP90 alpha inhibitor
  4. Heat shock protein; HHSP90 alpha inhibitor
  5. Heat shock protein; SP90 alpha inhibitor
复制代码
匹配规则如下:
如果匹配到SP90 alpha inhibitor前面一个字符是非空格字符,如上面的HH-SP90 alpha inhibitor和HHSP90 alpha inhibitor,则需要删除;
还有,如果匹配到SP90 alpha inhibitor前面一个字符是空格,但与空格相邻左边的字符不是分号;字符,如上面的HH SP90 alpha inhibitor,则需要删除。

同时满足上面两种匹配规则,像这样,sed '/   /'d data.txt | sed '/   /'d,/   /里的匹配表达式该怎么写呢?万分感谢!!!

论坛徽章:
28
15-16赛季CBA联赛之八一
日期:2016-02-22 19:10:4215-16赛季CBA联赛之深圳
日期:2016-12-01 10:34:0415-16赛季CBA联赛之新疆
日期:2016-12-07 10:24:2915-16赛季CBA联赛之同曦
日期:2016-12-15 12:06:43CU十四周年纪念徽章
日期:2016-12-18 13:03:4415-16赛季CBA联赛之吉林
日期:2017-01-03 15:52:2515-16赛季CBA联赛之辽宁
日期:2017-01-04 14:58:2415-16赛季CBA联赛之辽宁
日期:2017-01-15 09:42:512016科比退役纪念章
日期:2017-02-06 17:21:50黑曼巴
日期:2017-02-10 15:46:1215-16赛季CBA联赛之上海
日期:2017-03-18 10:14:5415-16赛季CBA联赛之青岛
日期:2017-03-18 22:00:44
2 [报告]
发表于 2016-07-07 14:55 |只看该作者
第一行需要删吗?
  1. sed -r '/;\s+SP90 alpha inhibitor/!d' data.txt
复制代码
?

论坛徽章:
0
3 [报告]
发表于 2016-07-07 15:01 |只看该作者
第一行要保留的,谢谢!回复 2# moperyblue


   

论坛徽章:
28
15-16赛季CBA联赛之八一
日期:2016-02-22 19:10:4215-16赛季CBA联赛之深圳
日期:2016-12-01 10:34:0415-16赛季CBA联赛之新疆
日期:2016-12-07 10:24:2915-16赛季CBA联赛之同曦
日期:2016-12-15 12:06:43CU十四周年纪念徽章
日期:2016-12-18 13:03:4415-16赛季CBA联赛之吉林
日期:2017-01-03 15:52:2515-16赛季CBA联赛之辽宁
日期:2017-01-04 14:58:2415-16赛季CBA联赛之辽宁
日期:2017-01-15 09:42:512016科比退役纪念章
日期:2017-02-06 17:21:50黑曼巴
日期:2017-02-10 15:46:1215-16赛季CBA联赛之上海
日期:2017-03-18 10:14:5415-16赛季CBA联赛之青岛
日期:2017-03-18 22:00:44
4 [报告]
发表于 2016-07-07 15:05 |只看该作者
回复 3# chinaunixfan2
  1. sed -r '/(;\s+|^)SP90 alpha inhibitor/!d' data.txt  
复制代码
?

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
5 [报告]
发表于 2016-07-07 15:09 |只看该作者
回复 3# chinaunixfan2
你应该将你期望的结果贴出来, 如有特殊要求请标明.

   

论坛徽章:
769
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
6 [报告]
发表于 2016-07-07 15:16 |只看该作者
回复 1# chinaunixfan2

  1. sed '/\([^ ]\|[^;] \)SP90 alpha inhibitor/d' i
  2. SP90 alpha inhibitor
  3. Heat shock protein; SP90 alpha inhibitor
复制代码

评分

参与人数 2信誉积分 +10 收起 理由
chinaunixfan2 + 5 赞一个!
sunzhiguolu + 5 谢谢提醒, 非常感谢!!!

查看全部评分

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
7 [报告]
发表于 2016-07-07 15:24 |只看该作者
其实你的这个要求挺简单, 提供个思路:
如果空白之前是 ";" 分号的并且后面跟 SP90 串的就删除;
如果一个非空白字符后面跟 SP90 串的就删除;
两者组合一下, 将相同的部分提出来 就是匹配条件.

论坛徽章:
0
8 [报告]
发表于 2016-07-07 15:44 |只看该作者
“如果空白之前是 ";" 分号的并且后面跟 SP90 串的就删除;”,不哦,我需要的是保留“空白之前是 ";" 分号的并且后面跟 SP90 串”,把空白前的不是分号的字符的那一行删除哦。回复 7# sunzhiguolu


   

论坛徽章:
0
9 [报告]
发表于 2016-07-07 15:46 |只看该作者
非常感谢,这个代码可以解决我的问题!!回复 6# Herowinter


   

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
10 [报告]
发表于 2016-07-07 16:03 |只看该作者
  1. perl -ne 'print if(!/([^;])?(?(1)\h|\S)SP90/)' f
复制代码
SP90 alpha inhibitor
Heat shock protein; SP90 alpha inhibitor
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP