
以下は、アクティブにする既存のクローンです。
crontab -l
####Cron to auto restart MYAPP
###*/15 * * * * ansible-playbook /web/playbooks/detectMYAPP/va_action.yml | tee -a /web/playbooks/detectMYAPP/cron.out
アプリケーション名を一致させてcronを有効にしたいです。MYAPP
sed
同じ目的を達成するには、次のコマンドを使用します。
crontab -l> /web/playbooks/cronenabledisable/wladmin.cron
sed -i '/^#.*MYAPP/Is/^[#]*//' /web/playbooks/cronenabledisable/wladmin.cron
crontab /web/playbooks/cronenabledisable/wladmin.cron
####Cron to auto restart MYAPP
残念ながら、cronをインストールできないという注釈付きセクションのコメントを削除しました。
問題のある電流出力:
Cron to auto restart MYAPP
*/15 * * * * ansible-playbook /web/playbooks/detectMYAPP/va_action.yml | tee -a /web/playbooks/detectMYAPP/cron.out
予想出力:
####Cron to auto restart MYAPP
*/15 * * * * ansible-playbook /web/playbooks/detectMYAPP/va_action.yml | tee -a /web/playbooks/detectMYAPP/cron.out
MYAPP
注:コメントセクションに保存したいです。####Cron to auto restart MYAPP
つまり、命名規則のため簡単に削除することはできません。
答え1
使用sed
$ sed -Ei.bak '/#+(\*.*myapp)/Is//\1/' input_file
####Cron to auto restart MYAPP
*/15 * * * * ansible-playbook /web/playbooks/detectMYAPP/va_action.yml | tee -a /web/playbooks/detectMYAPP/cron.out
-i.bak
ロールバックする必要がある場合に備えて、バックアップファイルが作成されます。
答え2
まず、GNU-sedの「-i」オプションを使用しないことをお勧めします!危険です。ファイルの「インライン編集」を実行すると主張しますが、実際には自動的に一時ファイルを編集し、元のファイルを置き換えます。つまり、所有者やグループが変更され、inode番号やその他のメタ情報が確実に変更され、標準的な方法とは異なり、使用する一時ファイルを制御できません。これは、システムが適切な(間違った)瞬間にクラッシュするときに問題になる可能性があります。これはあなたの問題ではないかもしれませんが、POSIXもそれをサポートしていないので、移植性はありません。
sed
代わりに最初から(1970年1月1日深夜、ハハ)標準通りにしてください。
if sed '.....' /your/file > /path/to/tmpfile ; then
mv /your/file /your/file.bak # optional, create backup
mv /path/to/tmpfile /your/file
chown ..... # optionally adjust rights/ownership
chmod .....
fi
これで問題を解決するには、次のように誤った正規表現を使用してください。
/^#.*MYAPP/
ここであなたが探しています行の先頭、「#」、任意数の文字、最後に「MYAPP」。 sed は常に「最長一致」(「欲」とも呼ばれる)を使用します。つまり、octothorpeで始まり、どこにも「MYAPP」文字列を含む行がある場合は一致します。この行も同様です。
###*/15 * * * * ansible-playbook /web/playbooks/detectMYAPP/va_action.yml | tee -a /web/playbooks/detectMYAPP/cron.out
しかし、これもあります:
####Cron to auto restart MYAPP
例crontabが重要な場合は、コメントアウトされたコード行の前には3つのオクトソフしかありませんが、コメントには4つがあるため、解決策は次のとおりです(関連するsedコードのみ)。
/^###[^#].*MYAPP/ s/^###//
これは最初に正確に3つのオクトソフがある行でのみ機能します(3つのオクトソフの後にビオクトソフが続きます。「[^#]」は「#」を除くすべてと一致します)。その後、行のどこにでも「MYAPP」が続きます。この行では、最初の3つのオクトソフはどんなものにも置き換えられません(例:削除済み)。