MYAPP文字列と一致してcronのコメントを解除できません。

MYAPP文字列と一致してcronのコメントを解除できません。

以下は、アクティブにする既存のクローンです。

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つのオクトソフはどんなものにも置き換えられません(例:削除済み)。

関連情報