免费注册 查看新帖 |

Chinaunix

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

发道题目,大家共勉一下! [复制链接]

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
41 [报告]
发表于 2006-08-22 12:34 |只看该作者
这么说“苦”果然是“非礼”的意思,遭人“非礼”当然苦了。^_^
谢谢waker, r2007两位!

论坛徽章:
0
42 [报告]
发表于 2006-08-22 17:03 |只看该作者
我想知道楼主的正解是什么?

论坛徽章:
0
43 [报告]
发表于 2006-08-22 18:15 |只看该作者
楼主的问题有何意义?

论坛徽章:
0
44 [报告]
发表于 2006-08-22 20:33 |只看该作者
OK!
大家对于这道问题的关注,我看了一下,确实很关注哦!
我写这个题目的目的其实就是 共勉一下,大家一起进步而已!
我为什么会有这个想法呢?主要是上周日我在看书的时候,看到sed的一些深层次
的内容介绍的时候,感觉很有益处,所以希望和大家一起分享一下,所以就搞出这个
共勉的题目了。

可能 有的人对于我的发帖风格有异议,我承认,确实有不妥的地方,不好意思哦!请大家谅解!

OK!

下面是我的解答内容哦:

一般来说,sed在处理我们日常的问题的时候,他的处理的方法是这个样子的:

首先,分行单独读入一条语句,也就是一行text,然后根据我们输入的sed参数进行运作。
然后,读入第二行的text,重复上一次的操作,直到整个file处理结束。

但是,大家可以看出来,在我得题目中,其实是一个很简单的替换的过程 ,就是将
User and Operation Documents 替换为 Instruction Documents 。
其实如果在普通的sed过程中就是一个 sed ‘s/XXX/YYY/g’ urfile .

看上去很简单,但是,在我得题目中,你是没有办法使用的。因为我的题目中
User and Operation Documents 被我分在了不同的行中,这就要求我们需要在一个多行
读入的状态下,然后进行sed的替换运作。

这这就要求大家调整sed的工作的状态,将其调整为多行(NEXT)工作效果。

PS:NEXT 多行N命令通过读取新的输入行,并将其添加到模式空间的现有内容之后,从而
创建多行模式空间。

那么这里就要提一下什么是模式空间了, 模式空间是指容纳当前输入行的缓冲区。还有一个称之为
保持空间(Hold Space)的预留缓冲区 ,模式空间的内容可以复制道保持空间,而保持空间的
内容也可以复制到模式空间。sed有专门的命令供两者之间的移动数据。

通过这样子,就可以提高缓冲区中的数据的量,从而提高我们的对于多行数据中的内容的操作的
能力。

但是,在我的题目中并没有这么的复杂,我们其实就是一个多行模式空间的应用,对于保持空间,
我们的题目并没有需要的哦!

好了,我们的题目解决的过程中呢,很多的网友已经给出了一些很好的答案了。
这里,我把我自己的拙见也拿出来让大家批评一下。

^_^ !

#sed -f sedscript urfile
#more sedscript
/User/{
N
s/User *\n*and *\n*Operation *\n*Documents/Instruction Documents/
}

                                                                  #对于复杂的格式,你可以添加其它项目
/Operation/{
N
s/User *\n*and *\n*Operation *\n*Documents/Instruction Documents/
}

其实这个sed 的script 很简单哦!
就是sed在工作的过程中会去读取行结尾的User或者Operation ... 或者你需要的其他.
然后读取下一个输入行,然后进行替换操作或者其他的操作。

s/User *\n*and *\n*Operation *\n*Documents/Instruction Documents/
就是希望无论User and Operation Documents 出现在各个行的不同的位置,都进行替换

这就是我们上边提到的多行模式的应用哦!

这个题目呢?其实解答的方法很简单,但是,这个解决的过程还是很有意义 的,他给我门一个
在一个多行的环境中操作的能力。

好了,我罗索死了!

不知道,各位网友,我这个帖子,对你有帮助吗?

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
45 [报告]
发表于 2006-08-22 21:53 |只看该作者
to stephen412:
如果User后面是两个空行你的代码是不是就吊了

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:56:11
46 [报告]
发表于 2006-08-23 05:33 |只看该作者

回复 44楼 stephen412 的帖子

据说代码与数据分开的编程风格比较好。如果有一大堆的数据需要替换,这样的脚本写起来就麻烦了。

论坛徽章:
0
47 [报告]
发表于 2006-08-23 08:56 |只看该作者
原帖由 waker 于 2006-8-22 21:53 发表
to stephen412:
如果User后面是两个空行你的代码是不是就吊了



哈哈!
^_^ , 我发这个问题帖子的目的其实就是大家的共勉,和抛砖引玉 哦!

BTY : waker 也是 NJ 人啊?
   小心别的网友不懂你的倒数第二个字哦!

[ 本帖最后由 stephen412 于 2006-8-23 08:57 编辑 ]

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
48 [报告]
发表于 2006-08-23 08:57 |只看该作者
俺是中国人

论坛徽章:
0
49 [报告]
发表于 2006-08-23 09:29 |只看该作者
BS楼主,看了《sed & awk》第二版128页的例子就来这里考大家!!!


BS

论坛徽章:
0
50 [报告]
发表于 2006-08-23 10:35 |只看该作者
原帖由 hwxo 于 2006-8-23 09:29 发表
BS楼主,看了《sed & awk》第二版128页的例子就来这里考大家!!!


BS


呵呵!
这又不是在考大家,真是的,对于这个题目的理解有问题阿!
其实就是借这个题目和大家有一个交流的机会阿!
然后,大家通过这道我编出来的题目,互相探讨这个题目的外延和内涵阿!
重点就是在讨论这个过程阿,受益最大的也是在学习和讨论的过程阿!

也希望通过这个机会了解更加多的解决问题的方法。

又不是为了炫耀和考试什么的?

你仔细的读读前边的帖子就知道了,我一直是这样子做的阿!

看来阿!你对于生活的理解还是太片面了!!

[ 本帖最后由 stephen412 于 2006-8-23 10:36 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP