#! /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[]
GNU awkを使用しているときにソースファイルを変更するには、次の手順を実行します。 awk 'script' new.conf > "$tmp" && mv "$tmp" new.conf` awk -i inplace 'script' new.conf
with other awks .tmp=$(mktemp) &&