vim能否实现将一个文件的多处内容替换另一个文件的相应内容?

Vim、Emacs配置和使用
cao627
帖子: 992
注册时间: 2007-12-05 10:57
系统: ubuntu14.04
来自: 金山

Re: vim能否实现将一个文件的多处内容替换另一个文件的相应内容?

#16

帖子 cao627 » 2012-03-17 12:49

3楼,帮忙看看

代码: 全选

sed -n '/^[[:digit:]]\+/{s:.*:/^&$/{n;s/.*/:;n;s:.*:&/}:;p}' 文件2
为什么会得到

代码: 全选

b1/}
b2/}
b3/}
b4/}
b5/}
b6/}
我对;N; 这个命令不是很理解,所想用;n;代替
cao627
帖子: 992
注册时间: 2007-12-05 10:57
系统: ubuntu14.04
来自: 金山

Re: vim能否实现将一个文件的多处内容替换另一个文件的相应内容?

#17

帖子 cao627 » 2012-03-17 17:00

终于弄明白了

sed的语法格式:sed [option] {sed-command} {input-file}

sed在正常情况下,将处理的行读入模式空间(pattern space),脚本中的“sed-command(sed命令)”就一条接着一条进行处理,直到脚本执行完毕。然后该行被输出,模式(pattern space)被清空;接着,在重复执行刚才的动作,文件中的新的一行被读入,直到文件处理完毕。

命令n:
读取下一行到pattern space。由于pattern space中有按照正常流程读取的内容,使用n命令后,pattern space中又有了一行,此时,pattern space中有2行内容,但是先读取的那一行不会被取代、覆盖或删除;当n命令后,还有其他命令p的时候,此时打印出的结果是n命令读取的那一行的内容。

N命令:
将下一行添加到pattern space中。将当前读入行和用N命令添加的下一行看成“一行”。
想必是把:
"先前的的行"
"执行N后的下一行"
看做:
"先前的的行\n执行N后的下一行"了
aerofox
帖子: 1453
注册时间: 2008-05-24 8:30

Re: vim能否实现将一个文件的多处内容替换另一个文件的相应内容?

#18

帖子 aerofox » 2012-03-17 20:34

楼上理解得比较明白了。
补充一下,n命令是读取一行替代 pattern space,pattern space 中将只包含新读取的内容。如果没有给出 -n 命令行参数,原来的 pattern space 在丢弃之前会输出。
回复