Chinaunix
标题:
一个消重语句
[打印本页]
作者:
deepalley
时间:
2010-04-15 19:07
标题:
一个消重语句
本帖最后由 deepalley 于 2010-04-15 19:13 编辑
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
应该是匹配诸如这样的东西吧
wer
tttttt
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