在文件的最后一行之前添加三个新行

时间:2015-10-07 20:30:49

标签: linux bash sed cat

我的sysctl.conf文件中有这个文本块。

#begin_atto_network_settings
net.inet.tcp.sendspace=1048576
net.inet.tcp.recvspace=1048576
net.inet.tcp.delayed_ack=0
net.inet.tcp.rfc1323=1
#end_atto_network_settings

我需要在#end_atto_network_settings之前插入以下三行。

kern.ipc.maxsockbuf=2097152    
net.link.generic.system.sndq_maxlen=512
net.classq.sfb.allocation=100

我假设有一些sed命令的变体?

2 个答案:

答案 0 :(得分:2)

如果您想编辑该文件,可以使用标准编辑器ed

ed -s file <<EOF
1,/#end_atto_network_settings/i
kern.ipc.maxsockbuf=2097152    
net.link.generic.system.sndq_maxlen=512
net.classq.sfb.allocation=100
.
w
q
EOF

请注意,编辑文件不会更改权限并保留符号链接; sed -i通常会创建一个临时文件,删除旧文件并重命名临时文件:因此它不会保留权限和符号链接。

答案 1 :(得分:1)

如果要在模式之前插入行:

sed '/end_atto_network_settings/i \
kern.ipc.maxsockbuf=2097152 \
net.link.generic.system.sndq_maxlen=512 \
net.classq.sfb.allocation=100' file

或者,如果您的文件在EOF处没有空行:

sed '$ i\
kern.ipc.maxsockbuf=2097152 \
net.link.generic.system.sndq_maxlen=512 \
net.classq.sfb.allocation=100' file

含义: $ - 文件结束, i - 插入,  \ - 新行分隔符