免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 我是笨笨
打印 上一主题 下一主题

这段sed的用法看不懂了,能说说什么意思吗? [复制链接]

论坛徽章:
0
11 [报告]
发表于 2005-05-16 19:05 |只看该作者

这段sed的用法看不懂了,能说说什么意思吗?

他的是有空格的,没有漏

论坛徽章:
0
12 [报告]
发表于 2005-05-16 19:07 |只看该作者

这段sed的用法看不懂了,能说说什么意思吗?

原帖由 "NICKY.BOY" 发表:


朋友,如果想要书上的效果需要定义第2个目标。下面的方法可以
sed '/Linux/{h;s/.* Linux \(.*\) \(.*\) /\1:/;p;x;}' command.txt

我刚才又试了一下,和waker说的空格问题有关
sed '/Linux/{h;s/.* Linux \(.*\) .*/\1:/;p;x;}' command.txt
sed '/Linux/{h;s/.* Linux \(.*\) .* /\1:/;p;x;}' command.txt
这两个执行效果是不一样的
s///是替换
.*后面为什么要加空格呢?

论坛徽章:
7
荣誉版主
日期:2011-11-23 16:44:17子鼠
日期:2014-07-24 15:38:07狮子座
日期:2014-07-24 11:00:54巨蟹座
日期:2014-07-21 19:03:10双子座
日期:2014-05-22 12:00:09卯兔
日期:2014-05-08 19:43:17卯兔
日期:2014-08-22 13:39:09
13 [报告]
发表于 2005-05-16 21:38 |只看该作者

这段sed的用法看不懂了,能说说什么意思吗?

因为cu code标签中的内容每一行的最后都会自动加一个空格,所以直接复制提供的数据测试会影响结果
郁闷!

论坛徽章:
0
14 [报告]
发表于 2005-05-16 22:47 |只看该作者

这段sed的用法看不懂了,能说说什么意思吗?

原帖由 "NICKY.BOY" 发表:
honbj兄
我认为1: 不代表linux后的内容,而是()里的内容,我上面的回帖充分说明这点。


谢谢指正 没看清空格

论坛徽章:
0
15 [报告]
发表于 2005-05-16 22:49 |只看该作者

这段sed的用法看不懂了,能说说什么意思吗?

原帖由 "r2007" 发表:
因为cu code标签中的内容每一行的最后都会自动加一个空格,所以直接复制提供的数据测试会影响结果
郁闷!

不是的版主大人,您没看清楚,那两行的差别在中间位置,第二行比第一行中间多了一个空格

按waker说的用■代替空格的写法,就是
sed '/Linux/{h;s/.* Linux \(.*\) .*/\1:/;p;x;}' command.txt
sed '/Linux/{h;s/.* Linux \(.*\) .*■/\1:/;p;x;}' command.txt
这两行的效果是不一样的,为什么呢?不是s///吗?
难道.*后面还要加空格才可以?

论坛徽章:
0
16 [报告]
发表于 2005-05-16 23:01 |只看该作者

这段sed的用法看不懂了,能说说什么意思吗?

原帖由 "我是笨笨" 发表:

不是的版主大人,您没看清楚,那两行的差别在中间位置,第二行比第一行中间多了一个空格

按waker说的用■代替空格的写法,就是
sed '/Linux/{h;s/.* Linux \(.*\) .*/\1:/;p;x;}' command.txt
sed '/Linux/{h;..........



这个不是关键问题
是s///   这里使用空格将该行分成了四部分 其中\1代表 Linux后两个空格间的字符ls 最后一个.*后面应该没有空格

论坛徽章:
7
荣誉版主
日期:2011-11-23 16:44:17子鼠
日期:2014-07-24 15:38:07狮子座
日期:2014-07-24 11:00:54巨蟹座
日期:2014-07-21 19:03:10双子座
日期:2014-05-22 12:00:09卯兔
日期:2014-05-08 19:43:17卯兔
日期:2014-08-22 13:39:09
17 [报告]
发表于 2005-05-16 23:07 |只看该作者

这段sed的用法看不懂了,能说说什么意思吗?

确认一下command.txt 行尾是否有空格,去掉后就会得到期望的结果了(仍然用第一种写法)。

论坛徽章:
0
18 [报告]
发表于 2005-05-16 23:13 |只看该作者

这段sed的用法看不懂了,能说说什么意思吗?

[quote]原帖由 "r2007"]确认一下command.txt 行尾是否有空格,去掉后就会得到期望的结果了(仍然用第一种写法)。[/quote 发表:

果然好了!
为什么会这样呢?
行尾的空格为什么会对结果有影响?
.*不是代表全部的意思了吗?

论坛徽章:
7
荣誉版主
日期:2011-11-23 16:44:17子鼠
日期:2014-07-24 15:38:07狮子座
日期:2014-07-24 11:00:54巨蟹座
日期:2014-07-21 19:03:10双子座
日期:2014-05-22 12:00:09卯兔
日期:2014-05-08 19:43:17卯兔
日期:2014-08-22 13:39:09
19 [报告]
发表于 2005-05-16 23:55 |只看该作者

这段sed的用法看不懂了,能说说什么意思吗?

因为sed的正则匹配是贪婪的,把.*换成这样
  1. sed '/Linux/{h;s/.* Linux \([^ ]*\)/\1:/;p;x;}' command.txt
复制代码

行尾有没有空格都没有关系。

论坛徽章:
0
20 [报告]
发表于 2005-05-16 23:58 |只看该作者

这段sed的用法看不懂了,能说说什么意思吗?

谢谢版主
^*我明白了,代表整个行,从头开始的全部,但是书上写的是^.*,是不是代表不为空的整行?
还有一点,就是版主说的“贪婪”该怎么理解?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP