同じパターンといくつかの可変コンテンツでパターンを置き換える

同じパターンといくつかの可変コンテンツでパターンを置き換える
#! /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_passsedまたはawkを別の方法で使用する場合(たとえば、シェル変数の値を渡す-vのではなく使用)、問題を引き起こす可能性がある文字/文字列を強調するために特に選択されました。ENVIRON[]

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

関連情報