#! /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`。