我试图通过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
)
答案 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