複数ファイルの複数変数を一度に一括置換

複数ファイルの複数変数を一度に一括置換

$VAR例:たとえば、40の異なる変数があります.txt/home/user/EXAMPLE/100個のファイル内のすべての変数をどのように変更できますか?

変数が何であるかをシステムに知らせるには、同様のファイルまたは.csv区切り.txt文字を持つファイルを使用することをお勧めします。例:

$VAR=x 
$VAR2=xx
$VAR3=xxx

一括編集方法をご存知ですか?

答え1

質問を2つの部分に分けます。

  1. ファイルトラバース
  2. ファイルへの代替の適用

ディレクトリにある場合は、EXAMPLE次のようにすべてのファイルを繰り返すことができます。

for file in *.txt
do
    echo "Considering file $file"
done

$PATH理想的には、既存のシェル変数(または)と競合しない一連の変数を置き換えるには、を$HOME使用できますenvsubst

variables.sh各行の形式で次のファイルを作成します。

export varname=value
export anothername='a longer value'

その後、このコードを使用して名前付きファイルなどの$varname変数を置き換えることができます。$anothername

( . variables.sh; envsubst ) <"$file" >"$file.tmp" &&
    mv -f "$file.tmp" "$file"

以下を一緒に使用してください。

for file in *.txt
do
    echo "Considering file $file"
    ( . variables.sh; envsubst ) <"$file" >"$file.tmp" &&
        mv -f "$file.tmp" "$file"
done

関連情報