我正在使用sed在格式化的apache conf文档中插入一行,我想保留格式。为此,我需要插入带有标签的行。
这是我的命令:
sed -i "/DocumentRoot\s\/data\/iga\/wwwroot/a \t\t\tServerName itWorked" /etc/apache2/sites-available/default-ssl.conf
这是输出:
DocumentRoot /data/iga/wwwroot
t ServerName itworked
我需要的是sed将第一个“ \ t”视为选项卡,而不是“ t”,这样输出如下:
DocumentRoot /data/iga/wwwroot
ServerName itWorked
答案 0 :(得分:1)
只需使用awk:
$ awk '{print} sub(/DocumentRoot\s\/data\/iga\/wwwroot.*/,"ServerName itworked")' file
DocumentRoot /data/iga/wwwroot
ServerName itworked
以上内容将使用“ DocumentRoot”行中存在的任何间距,而不是要求您在命令中再次指定间距。要进行“内联”更改,请添加-i inline
,它将与GNU awk一起使用,就像-i
与GNU sed-awk -i inline '...' file
一样。
答案 1 :(得分:1)
请改为尝试
sed -i "/DocumentRoot\s\/data\/iga\/wwwroot/a\\\t\t\tServerName itWorked" /etc/apache2/sites-available/default-ssl.conf
或
sed -i '/DocumentRoot\s\/data\/iga\/wwwroot/a\\t\t\tServerName itWorked' /etc/apache2/sites-available/default-ssl.conf
# enclosed with single quotes
a
命令在替换文字前应加反斜杠,
那么您需要添加额外的反斜杠。
请注意,替换中的\t
种表示法受以下支持
仅GNU sed
。标准sed
没有。