Chinaunix

标题: 一个消重语句 [打印本页]

作者: deepalley    时间: 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的意思吗? 迷惑中啊
作者: lkk2003rty    时间: 2010-04-15 19:20
本帖最后由 lkk2003rty 于 2010-04-15 19:30 编辑

&指匹配的内容 这里就是\n所以就是两个\n
/^\(.*\n\).*\n\1/d
应该是匹配诸如这样的东西吧
  1. wer
  2. tttttt
  3. wer
复制代码
模式空间内第一行和第三行一样的
但是这里木有用多行的模式空间
没看出来有啥用啊
作者: crowsy001    时间: 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的意思吗
我感觉也是
作者: ghp268    时间: 2010-04-15 21:25
看晕了。。
作者: deepalley    时间: 2010-04-16 14:56
还是没太懂呀 这串命令有个好处,它可以保持源文件的顺序 进行消重 很想搞明白,再研究一下,谢楼上
作者: ghp268    时间: 2010-04-16 18:11
回复 5# deepalley


    这个sed的用法,好像和uniq差不多
作者: ghp268    时间: 2010-04-16 18:13
说错了 应该比uniq更高级,它能跨多行消除重复行




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