我正在尝试编写一个shell脚本,在启动时在配置文件中进行搜索和替换。
我们要替换的字符串是:
include /etc/nginx/https.include;
我们希望将其替换为注释版本:
#include /etc/nginx/https.include;
包含我们要替换的字符串的文件是:
/etc/nginx/app-servers.include
我不是Linux大师,似乎无法找到执行此操作的命令。
答案 0 :(得分:7)
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
,表示括号内的模式,最后{{1} } %
。
HTH。 HAND。
答案 1 :(得分:3)
sed -i's / foo / bar / g'config.txt
这将用文件config.txt中的bar替换foo的所有实例(不区分大小写)
答案 2 :(得分:2)
结帐sed:
sed -i -r 's|^(include /etc/nginx/https.include;)$|#\1|' /etc/nginx/app-servers.include
-i
表示就地替换,-r
表示使用扩展正则表达式。
答案 3 :(得分:0)
cd pathname
for y in `ls *`;
do sed "s/ABCD/DCBA/g" $y > temp; mv temp $y;
done
此脚本shold将路径名
中所有文件中的字符串ABCD替换为DCBA