- 论坛徽章:
- 0
|
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 出现在各个行的不同的位置,都进行替换
这就是我们上边提到的多行模式的应用哦!
这个题目呢?其实解答的方法很简单,但是,这个解决的过程还是很有意义 的,他给我门一个
在一个多行的环境中操作的能力。
好了,我罗索死了!
不知道,各位网友,我这个帖子,对你有帮助吗? |
|