0

「sed」で達成しようとしているのは、パターンが一致した場合に行を削除することです。パターンが一致しない場合は行を追加します。

しかし、どうすればこれを作ることができますか?前もって感謝します

例: Crontab でこの行を使用するには、次のようにします。

*/1 * * * * script 1 test

他のスクリプトでは、このパターンが存在する場合はこの行を削除し、パターンが一致しない場合はこの行を追加します。

4

4 に答える 4

0
awk -v tgt='*/1 * * * * script 1 test' 'index($0,tgt){found=1;next} {print} END{if (!found) print tgt}' file
于 2013-01-28T20:43:47.680 に答える
0

これはうまくいくかもしれません(GNU sed):

sed 'x;/./{x;b};x;/pattern/{h;d};$a\append new line' file
于 2013-01-28T20:50:12.173 に答える
0

自動的に追加された 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 を再フォーマットするときに重複を防ぎ、ユーザーが自分で追加した同様のジョブを削除するのを防ぎます。

于 2013-01-28T20:51:10.987 に答える
0

grep -qF 'line' file && echo 'line' >> file: を使用して、ファイルに見つからない場合にのみ行を追加します。

grep -qF '*/1 * * * * script 1 test' file || echo '*/1 * * * * script 1 test' >> file
于 2013-01-28T21:18:25.810 に答える