免费注册 查看新帖 |

Chinaunix

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

一个消重语句 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-04-15 19:07 |只看该作者 |倒序浏览
本帖最后由 deepalley 于 2010-04-15 19:13 编辑
  1. sed -n 'G; s/\n/&&/; /^\(.*\n\).*\n\1/d; s/\n//; h; P' file
复制代码
这个消重语句哪位能解释一下,/^\(.*\n\).*\n\1/d 是匹配什么情况的?  s/\n/&&/中的&&是两个\n的意思吗? 迷惑中啊

论坛徽章:
0
2 [报告]
发表于 2010-04-15 19:20 |只看该作者
本帖最后由 lkk2003rty 于 2010-04-15 19:30 编辑

&指匹配的内容 这里就是\n所以就是两个\n
/^\(.*\n\).*\n\1/d
应该是匹配诸如这样的东西吧
  1. wer
  2. tttttt
  3. wer
复制代码
模式空间内第一行和第三行一样的
但是这里木有用多行的模式空间
没看出来有啥用啊

论坛徽章:
0
3 [报告]
发表于 2010-04-15 19:38 |只看该作者
这个消重语句哪位能解释一下,/^\(.*\n\).*\n\1/d 是匹配什么情况的?  s/\n/&&/中的&&是两个\n的意思吗?  ...
deepalley 发表于 2010-04-15 19:07


复杂的sed 就像天书一样神奇; 也像古汉语一样晦涩
    这个消重语句哪位能解释一下,/^\(.*\n\).*\n\1/d 是匹配什么情况的?  s/\n/&&/中的&&是两个\n的意思吗? 迷惑中啊
自己的看法未必准确

/^\(.*\n\).*\n\1/d
拆分 partten  ^\(.*\n\).*\n\1     
                    ^ 开始   
                     \(   \) 对应起来是一个组   .* 任意个字符    \n换行     \(.*\n\) 匹配一行
                    .* 任意个字符  \n换行      紧接着一行
                    \1   表示 \(   \) 中的内容 ,如果上一次匹配的是123  这 \1 表示123
       action    d

s/\n/&&/中的&&是两个\n的意思吗
我感觉也是

论坛徽章:
0
4 [报告]
发表于 2010-04-15 21:25 |只看该作者
看晕了。。

论坛徽章:
0
5 [报告]
发表于 2010-04-16 14:56 |只看该作者
还是没太懂呀 这串命令有个好处,它可以保持源文件的顺序 进行消重 很想搞明白,再研究一下,谢楼上

论坛徽章:
0
6 [报告]
发表于 2010-04-16 18:11 |只看该作者
回复 5# deepalley


    这个sed的用法,好像和uniq差不多

论坛徽章:
0
7 [报告]
发表于 2010-04-16 18:13 |只看该作者
说错了 应该比uniq更高级,它能跨多行消除重复行
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP