用相同的模式加上一些可变内容替换模式

用相同的模式加上一些可变内容替换模式
#! /bin/csh

# NEW PASS value will change in every run
set NEW_PASS=`dyanamic generating password on everyrun`

echo $NEW_PASS

还有另一个conf文件,我们需要在其中更改上面生成的密码。在 new.conf 文件中对应的行是 pass=XYZ,现在上面的 NEW_PASS 值应该用 new.conf 文件更新并替换 XYZ。我试过

sed -i -e "s/^pass*/pass=${NEW_PASS}/g" new.conf

但这不起作用。不确定命令语法是否存在任何问题。

答案1

听起来这就是您想要做的:

$ cat new.conf
foo
pass=bar
etc

$ new_pass='this & "that, \t /foo \1'

$ new_pass="$new_pass" awk 'index($0,"pass=")==1{ $0 = "pass=" ENVIRON["new_pass"]} 1' new.conf
foo
pass=this & "that, \t /foo \1
etc

我使用的值new_pass是专门选择的,以突出显示字符/字符串,如果您使用 sed 甚至以不同的方式使用 awk(例如,使用-v而不是ENVIRON[]传递 shell 变量值),这些字符/字符串将会出现问题。

如果您使用 GNU awk 要修改原始文件,请执行以下操作awk -i inplace 'script' new.conf:与其他 awks 一起执行tmp=$(mktemp) &&awk 'script' new.conf > "$tmp" && mv "$tmp" new.conf`。

相关内容