複数のファイルから1行置換

複数のファイルから1行置換

ディレクトリにいくつかのテキストファイルがあります。それらはすべてさまざまな文字列を持っていますが、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*

おすすめ記事