我正在尝试编写一个 shell 脚本,在启动时在配置文件中进行搜索和替换。
我们要替换的字符串是:
include /etc/nginx/https.include;
我们想用注释版本替换它:
#include /etc/nginx/https.include;
包含我们要替换的字符串的文件是:
/etc/nginx/app-servers.include
我不是 Linux 高手,似乎找不到执行此操作的命令。
最佳答案
perl -p -i -e 's%^(include /etc/nginx/https.include;)$%#$1%' /etc/nginx/ap-servers.include
如果该行可能不以 ;
结尾,请改用:
perl -p -i -e 's%^(include /etc/nginx/https.include;.*)$%#$1%' /etc/nginx/ap-servers.include
如果想保留原文件,在-i
后添加备份扩展名:
perl -p -i.bak -e 's%^(include /etc/nginx/https.include;)$%#$1%' /etc/nginx/ap-servers.include
现在,解释一下。 -p
标志表示就地替换。文件的所有行都将提供给表达式,结果将用作替换。 -i
标志表示备份文件的扩展名。通过不带任何东西使用它,可以防止生成备份。 -e
告诉 Perl 获取以下参数作为要执行的表达式。
现在,表达式是 s%something%other%
。我使用 %
而不是更传统的 /
来避免必须转义路径的斜线。为了安全起见,我在表达式中使用括号并在替代表达式中使用 $1
—— 如果您更改其中一个,另一个也会随之更改。因此,%#$1%
实际上是 s
的第二个 %
,后面是所需的 #
,$1
表示括号内的模式,以及 s
的最后 %
。
HTH。手。
关于linux - 如何从 shell 脚本搜索和替换文件中的文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1273881/