我需要一次覆盖许多服务器上的一些配置,并且我想在创建备份时修改原始配置文件,只是出于好奇,所有这些都可以用 sed 完成吗?
有人提到了这种模式,但它不起作用。
new_port="..."
sed -i .bak "s/port=2334/${new_port}/g"
答案1
sed -i .bak "s/port=2334/${new_port}/g"
几乎就是您正在寻找的;修复方法是删除后面的空格-i
:
sed -i.bak "s/port=2334/${new_port}/g"
如果new_port
只有端口号,您还必须重复port=
:
sed -i.bak "s/port=2334/port=${new_port}/g"
仅当您在表达式之后实际指定要处理的文件的名称时,所有这些才有效sed
。
答案2
尝试使用 awk
awk '{print $0}' file >file.backup && awk '{gsub(/port=2334/,"port=${new_port}",$0);print }' file >tmpfile && mv tmpfile file