我想搜索一行,然后在它旁边添加三行,我使用sed但它给我错误,PFB要求
要搜索的行 - 收听29399
要添加的行,
ServerName服务器 SSLEnable KeyFile / test / script / scripts
我使用的脚本,
sed -i '/Listen 29399/a <VirtualHost Servername:29399>\n SSLEnable\n #SSLClientAuth none\n </VirtualHost>\n SSLServerCert ServerCert\n KeyFile KeyFile /test/script/scripts' httpd.conf
错误:
sed: illegal option -- i
Usage: sed [-n] [-u] Script [File ...]
sed [-n] [-u] [-e Script] ... [-f Script_file] ... [File ...]
请帮忙。
AIX服务器
更新
请告诉我如何用其他三行代替一行,如下所示 源文件:
Listen 29399
结果文件内容:
Listen 29499
<VirtualHost Sever:25344>
Key File=/test/script
谢谢你。
答案 0 :(得分:2)
关于onRestoreInstanceState()
转换的问题(您的sed版本可能不支持它),the standard syntax使用sed追加行是这样的:
-i
那是sed '/Listen 29399/a\
<VirtualHost Servername:29399>\
SSLEnable\
#SSLClientAuth none\
</VirtualHost>\
SSLServerCert ServerCert\
KeyFile KeyFile /test/script/scripts' httpd.conf
,后跟换行符,后跟要追加的文字。某些版本的sed允许您指定要在同一行上追加的文本,有些则不允许 - 这是可移植的方法。此外,所有版本的sed都无法理解a\
- 您可以在每行的末尾添加\n
以附加我所显示的多行字符串。
如果这对您来说似乎很麻烦,请改用awk:
\
使用任一方法实现“就地”编辑,只需重定向到临时文件,然后覆盖原始文件,即awk '{print}/Listen 29399/{print "multi-line text\nto be inserted"}' file
。
如果不是附加文本,而是你想要的替换,那么你可以像这样使用sed:
cmd orig > tmp && mv tmp orig
我已使用sed 's~Listen 29399~Listen 29499\
<VirtualHost Sever:25344>\
Key File=/test/script~' file
分隔~
命令的各个部分,以避免需要转义所有s
。同样,替换中的每一行都以/
结束。
或者,使用awk:
\
实际上它是相同的替换,只是使用awk '{sub(/Listen 29399/, "Listen 29499\n<VirtualHost Sever:25344>\n<VirtualHost Sever:25344>")}1' file
换行。命令末尾的\n
表示输入的每一行都被打印出来。
答案 1 :(得分:0)
Vi不是您通常想要用脚本编辑文件的工具,但它是另一种方式(首先确保搜索将成功使用grep而Listen不是最后一行,正如我所说不使用它):
vi httpd.conf >/dev/null 2>&1 <<END
/Listen 29399
iVirtualHost Servername:29399
SSLEnable
#SSLClientAuth none
</VirtualHost>
SSLServerCert ServerCert
KeyFile KeyFile /test/script/scripts
**ESC**:wq!
END
ESC 是ESC的转义序列,我使用CTRL-V ESC
在vi中添加它。