リストから単語を含む行を削除するためにループ内でsedを使用するスクリプトがあります。
for i in $list; do
sed -i "/$i/d" file
done
$list
SQLクエリから生成された:
list=$(psql -d dbname -t -c "SELECT foo from table ORDER BY column DESC")
問題は、当社が最近、全体またはfchown
システムfchmod
コールを含む、より厳しい監査ルールを実装したことです。を使用すると、それぞれとシステムコールが含まれていることstrace
がわかります。sed -i
fchown
fchmod
大きなリスト変数を使用すると、iowait
このスパイクが劇的に増加し、auditdがログに膨大な数の行を記録するため、システムは実際に輻輳します。
ファイルが一度だけ開いて閉じるように、リスト変数を1行でsedに渡す方法があるかどうかを調べようとしています。
私は要求しましたが、 auditd ルールを変更できませんでした。
ありがとうございます。
ベストアンサー1
多数のインラインコマンドを1つずつ呼び出すのではなく、一度だけ実行してsed
単一のスクリプトを使用するだけです。sed
sedscript=$(mktemp)
for i in $list; do
echo "/$i/d" >> "$sedscript"
done
sed -f "$sedscript" -i /path/to/file
rm -f "$sedscript"