
我试图找出在配置文件中找到一行,然后下拉两行,然后插入一行代码。我试图在 awk/sed 中执行此操作,但卡在回车符上。我不依赖 awk/sed,而是寻找一种干净的方法来完成此任务。
<Location />
Order allow,deny
</Location>
然后在该块中添加一行:
<Location />
Order allow,deny
Allow all
</Location>
答案1
sed '/Order allow,deny/ aAllow all' < yourFile
这会将修改后的文件输出到标准输出。如果你想就地修改它(sed(1)):
-i[后缀], --in-place[=后缀]
edit files in place (makes backup if SUFFIX supplied)
解释:
For each line that matches `/Order allow,deny/`:
Execute command 'a' (append) with 'Allow all' as parameter
http://grymoire.com/Unix/sed.html是了解更多信息的绝佳资源sed
。
答案2
awk
可以用于此目的。下面的脚本只会在找到<Location />
标签后添加文本。
awk '/\<Location \/\>/{ start=1 } {if(start) ++start; if(start==4) print " Allow all"} 1' infile
对于以下输入文件:
stuff
<Location />
Order allow,deny
</Location>
more
stuff
该脚本产生:
stuff
<Location />
Order allow,deny
Allow all
</Location>
more
stuff
如果您想像这样替换多个部分,可以轻松修改相同的脚本:
awk '/\<Location \/\>/{ start=1 } {if(start) ++start; if(start==4){print " Allow all"; start=0}} 1' infile
答案3
Allow all
如果您只是盲目地想在任何之后添加语句Order allow,deny
,那么以下内容sed
将起作用
sed -i 's/Order\ allow,deny/Order\ allow,deny\nAllow\ all/' <inputfilename>
答案4
您可以在 Ex 模式下使用 Vim:
ex -sc '/Order allow,deny/a|Allow all' -cx file
a
追加文本和换行符x
保存并关闭