「sed」で達成しようとしているのは、パターンが一致した場合に行を削除することです。パターンが一致しない場合は行を追加します。
しかし、どうすればこれを作ることができますか?前もって感謝します
例: Crontab でこの行を使用するには、次のようにします。
*/1 * * * * script 1 test
他のスクリプトでは、このパターンが存在する場合はこの行を削除し、パターンが一致しない場合はこの行を追加します。
awk -v tgt='*/1 * * * * script 1 test' 'index($0,tgt){found=1;next} {print} END{if (!found) print tgt}' file
これはうまくいくかもしれません(GNU sed):
sed 'x;/./{x;b};x;/pattern/{h;d};$a\append new line' file
自動的に追加された crontab エントリにコメントを付けることをお勧めします。
* * * * * script 1 test #projectfoo-testjob
これにより、ジョブを簡単に削除できます。
sed -i.bak '/projectfoo-testjob/d' file
またはそれを追加します:
grep -q "projectfoo-testjob" file || \
echo '*/1 * * * * script 1 test #projectfoo-testjob' >> file
このようにジョブにタグを付けることで、スペースの代わりにタブを使用するなど、ユーザーが crontab を再フォーマットするときに重複を防ぎ、ユーザーが自分で追加した同様のジョブを削除するのを防ぎます。
grep -qF 'line' file && echo 'line' >> file: を使用して、ファイルに見つからない場合にのみ行を追加します。
grep -qF '*/1 * * * * script 1 test' file || echo '*/1 * * * * script 1 test' >> file