如何从shell脚本中搜索和替换文件中的文本?

use*_*413 1 linux ubuntu

我正在尝试编写一个shell脚本,在启动时在配置文件中进行搜索和替换.

我们要替换的字符串是:

include /etc/nginx/https.include;
Run Code Online (Sandbox Code Playgroud)

我们想用评论版替换它:

#include /etc/nginx/https.include;
Run Code Online (Sandbox Code Playgroud)

包含我们要替换的字符串的文件是:

/etc/nginx/app-servers.include 
Run Code Online (Sandbox Code Playgroud)

我不是Linux大师,似乎无法找到执行此操作的命令.

Dan*_*ral 7

perl -p -i -e 's%^(include /etc/nginx/https.include;)$%#$1%' /etc/nginx/ap-servers.include
Run Code Online (Sandbox Code Playgroud)

如果该行可能没有结束;,请使用:

perl -p -i -e 's%^(include /etc/nginx/https.include;.*)$%#$1%' /etc/nginx/ap-servers.include
Run Code Online (Sandbox Code Playgroud)

如果要保留原始文件,请在以下位置后添加备份扩展名-i:

perl -p -i.bak -e 's%^(include /etc/nginx/https.include;)$%#$1%' /etc/nginx/ap-servers.include
Run Code Online (Sandbox Code Playgroud)

现在,解释.该-p标志意味着就地更换.文件的所有行都将被送入表达式,结果将用作替换.该-i标志表示备份文件的扩展名.通过无任何使用它,您可以防止生成备份.该-e告诉Perl得到以下参数为将被执行的表达式.

现在,表达是s%something%other%.我使用%而不是更传统/的避免不得不逃避路径的斜线.我在表达式和$1替换表达式中使用括号表示安全性 - 如果更改一个,则另一个将遵循.因此,%#$1%实际上是第二%s,其次是期望的#,$1表示括号内的图案,最后%s.

HTH.手.