forループでsedと変数を使用する

forループでsedと変数を使用する

私は以下を持っています:

for i in "${arr[@]}"
do
sed -r "s/$i/ANON/g" /log > /test.txt
done

しかし、変数iは機能しません。

ベストアンサー1

ループにリダイレクトを含めると、繰り返しtest.txtごとに上書きされます。ループを使用してスクリプトを生成し、sedそれを使用してファイルを一度だけ処理できます。

for i in "${arr[@]}" ; do
    printf 's/%s/ANON/g\n' "$i"
done | sed -r -f- /log > /test.txt

または簡単に:

printf 's/%s/ANON/g\n' "${arr[@]}" | sed -r -f- /log > /test.txt

配列にsedに特別な意味を持つ文字が含まれていると、まだ破損する可能性があります(配列の内容を完全に制御できない場合は、コマンド注入の脆弱性に該当する可能性があります)。

おすすめ記事