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