作业帮 > 综合 > 作业

关于sed 参数n的问题 不要给我让我参考blog或者什么的,解释最好清楚一点

来源:学生作业帮 编辑:搜狗做题网作业帮 分类:综合作业 时间:2024/04/29 11:19:14
关于sed 参数n的问题 不要给我让我参考blog或者什么的,解释最好清楚一点
$ vi empnametitle.txt
JohnDoe
CEO
Jason Smith
IT Manager
Raj Reddy
Sysadmin
Anand Ram
Developer
Jane Miller
Sales Manager
为什么
$ sed –n -e '{x;n}’ –e ‘/Manager/{x;p}' empnametitle.txt
Jason Smith
Jane Miller
一步一步来
比如执行完第一个x后是模式空间和保留是什么内容,为什么.
关于sed 参数n的问题 不要给我让我参考blog或者什么的,解释最好清楚一点
sed 按行读取文本内容并在模式空间中处理,保留空间仅用于暂存数据.
第一步,读入一行(JohnDoe)到模式空间,x 交换模式空间与保留空间的内容.刚开始保留空间内为空,所以其结果就是JohnDoe被放入保留空间暂存,而模式空间被清空.n 主动读入下一行(CEO)到模式空间,并执行正则匹配Manager,由于不满足条件,因此后面的语句略过.
第二步,再读入一行(Jason Smith),x交换模式空间与保留空间内容,此时模式空间内容为JohnDoe,保留空间内容为Jason Smith.n 读入下一行替代了当前模式空间的内容,使模式空间内容为IT Manager.由于判断匹配Manager,执行后面的语句x和p,打印交换数据后模式空间的内容Jason Smith.
依此类推,保留空间的内容始终是当前模式空间内容的上一行.
此命令的作用就是,读取文件,当匹配到Manager时,就打印其上一行.
再问: 1.“n 主动读入下一行(CEO)到模式空间”,
CEO为什么不进行x操作
2.sed –n -e '{x;n}’ –e ‘/Manager/{x;p}'

这条语句,是每一行执行完第一个-e 接下来执行第二个-e吗
还是说empnametitle.txt全文执行完第一个-e后,再执行第二个-e
再答: CEO是n命令读入的,而n命令是在x命令之后。sed按行处理,对每一行都执行两个-e。sed可以有多条语句,用-e隔开,或者写在一个单引号对里,用分号隔开。所以,下面这样写也对。sed –n 'x;n;/Manager/{x;p}'