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

标签 linux ubuntu

我正在尝试编写一个 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/

相关文章:

ubuntu - Azure DevOps 专用代理 - 如何使用 nvm 安装节点

c - C语言中的 ':-!!'是什么?

linux - 如何传递函数路径

linux - 尝试从 ansible 中通过 screen 启动进程

ruby-on-rails - rbenv 不能在 ubuntu 上使用 rbenv 和 ruby​​-build 工作吗?

ubuntu - 为 Raspberry Pi 交叉编译第三方库的非繁琐方法

ubuntu - Ubuntu 12.0.4 上的 rabbitmq-server 安装问题

php - 另一个托管问题 : Linux, Apache2、PHP5、PostGreSQL 8.3

c++ - 我应该从源代码编译一个库吗?

ubuntu - MediaWiki 1.22.3 中的文件上传错误 - 无法创建目录 "mwstore://local-backend/local-public/7/70"