ディレクトリにいくつかのテキストファイルがあります。それらはすべてさまざまな文字列を持っていますが、1つの文字列はすべて同じです。
Acct-Session-Id = "XXXXXXXX-XXXXXXXX"
ここで、X - 16進形式の記号です。
すべてのファイルで、この ID を任意の XXXXXXXX-XXXXXXXX 番号に置き換える必要があります。番号はすべてのファイルで同じでなければなりません。交換後は、同じ名前でファイルを保存する必要があります。
sedにしてみましたが、成功しませんでした...
ベストアンサー1
このようにしてくださいアッ:
id=$(openssl rand -hex 8 | sed 's/./-&/9')
awk -v id=$id '$1 == "Acct-Session-Id"{$3="\042"id"\042"}1' file
出力
Acct-Session-Id = "f7ea78e0-1eeb7b09"
それから:
id=$(openssl rand -hex 8 | sed 's/./-&/9')
while IFS= read -r f; do
awk -v id=$id '$1 == "Acct-Session-Id"{$3="\042"id"\042"}1' "$f" > /tmp/tmp$$
mv /tmp/tmp$$ "$f"
done < <(grep -l 'Acct-Session-Id' .)
別の解決策は次のとおりです。真珠(ループと一時ファイルは必要ありません):
export id=$(openssl rand -hex 8 | sed 's/./-&/9')
perl -i -lane '
$F[2] = "\042$ENV{id}\042" if $F[0] eq "Acct-Session-Id";
print join " ", @F
' files*