从 bash 脚本向配置文件添加行?

从 bash 脚本向配置文件添加行?

我试图找出在配置文件中找到一行,然后下拉两行,然后插入一行代码。我试图在 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
  1. a追加文本和换行符

  2. x保存并关闭

相关内容