sed在文件结束前添加行

时间:2014-12-04 12:58:43

标签: regex bash sed

我试图通过shell在limits.conf文件结尾之前添加2行。

我写道:

 sudo sed '$ \\*                hard    nofile          128000\n \\*                soft    nofile          128000 ' /etc/security/limits.conf 

但是我得到了:

  

sed:-e表达式#1,char 3:未知命令:`\'

我也试过了:

sudo sed '$ \*                hard    nofile          128000\n \*                soft    nofile          128000 ' /etc/security/limits.conf`

我得到了同样的错误

我怎样才能简单地添加:

*                hard    nofile          128000
*                soft    nofile          128000

结束前的一行? (因为文件的末尾是#END FILE

2 个答案:

答案 0 :(得分:3)

您可以使用sed:{/ p>的i命令

sed '$ i\
*                hard    nofile          128000\
*                soft    nofile          128000
' /etc/security/limits.conf

结果:

...
#ftp             hard    nproc           0
#ftp             -       chroot          /ftp
#@student        -       maxlogins       4

*                hard    nofile          128000
*                soft    nofile          128000
# End of file

如果有更多行,i\添加以\结尾的每一行。

答案 1 :(得分:2)

正如anubhava对Add two consecutive lines in sed的回答所见,你可以说:

sed '/#END FILE/a\
*                hard    nofile          128000\
*                soft    nofile          128000
' your_file

一衬垫:

sed '/#END FILE/a\ *                hard    nofile          128000\n *                soft    nofile          128000 ' file

请注意使用\n表示新行。

请注意,您单独使用$,而您必须说'$a\才能附加文字。

来自man sed

  

零地址或单地址命令

     

a \

     

text附加文本,每个嵌入的换行前面都有一个   反斜杠

这种方法的问题是它在 #END FILE后写。要使其在之前写,我们可以使用tac反向读取文件:

tac a | sed '/#END FILE/a\ *                hard    nofile          128000\n *                soft    nofile          128000 ' | tac

测试

$ cat a
hello
#END FILE
$ tac a | sed '/#END FILE/a\ *                hard    nofile          128000\n *                soft    nofile          128000 ' | tac
hello
*                soft    nofile          128000 
*                hard    nofile          128000
#END FILE

最后,要进行就地编辑,请使用-i。以下代码将替换file中的内容并创建file.bak备份文件:

sed -i.bak '...' file