crontab行に「#」を追加

crontab行に「#」を追加

Linuxコマンドを使用してcrontabの行を変更する必要があります。 sed コマンドを使用して解決策を見つけることができません。助けてください?元の行は次のようになります。

* * * * * root /foo/pluto/minnie.sh

そしてしなければならない

#* * * * * root /foo/pluto/minnie.sh

多くの感謝

リチャード

答え1

何について:

crontab -l |sed 's/\(.*minnie\)/#\1/' > tmpfile
crontab tmpfile
rm tmpfile

または

EDITOR=/usr/bin/ed crontab -e
1
/minnie
s/^/#/
w
q

答え2

perl -pi -le '$_ = "#$@" if $_ eq "* * * * * root /foo/pluto/minnie.sh"' your-file

行の内容と正確に一致するオプションです。

行を変数に保存することもできます。

line='* * * * * root /foo/pluto/minnie.sh'

次に、次のように使用します。

file=some-file
perl -pi -lse '$_ = "#$_" if $_ -eq $line' -- -line="$line" -- "$file"

または環境変数として渡されます。

export LINE='* * * * * root /foo/pluto/minnie.sh'
perl -pi -le '$_ = "#$_" if $_ -eq $ENV{LINE}' -- "$file"

これを統合するには、次の手順を実行しますcrontab -e

LINE='* * * * * root /foo/pluto/minnie.sh' \
VISUAL='perl -pi -le '\''$_ = "#$_" if $_ -eq $ENV{LINE}
  '\'' --' crontab -e

または:

LINE='* * * * * root /foo/pluto/minnie.sh' \
  CODE='$_ = "#$_" if $_ -eq $ENV{LINE}' \
  VISUAL='perl -pi -le "$CODE" --' crontab -e

その後、スペースの内容と一時ファイルの名前を解釈として使用してコードを実行し、両方ともcrontabその環境で必要な変数(for、for)を見つけます。sh$VISUALshperlCODEshLINEperl


明らかにこれ視覚的ここで使用しているエディタは$VISUAL優先順位が高いため、使用するには$EDITOR設定を解除する必要があります。$VISUAL$EDITOR

答え3

sedコマンドを使用して解決策を見つけることができません

とても簡単です。行セットを処理するには、ルールを指定します。ルールは、行を選択する正規表現と、その行で実行するコマンドのセットで構成されます。例は次のとおりです。

sed '/^abc/ {; s/abc/xyz/g; }' /path/to/input > output

これは「abc」で始まる行でのみ機能します。これらすべての行で(そしてこの行のみ)、文字列 "abc"は "xyz"に変更されます。

したがって、行にコメントを付けたい場合は、行の先頭をoctothorpeに置き換えます。

sed '/minnie/ {; s/^/# / ; }' /path/to/input > output

注釈付きの行の後に新しい行を追加するには、「a」コマンドを使用することもできます。

sed '/minnie/ {
                s/^/# /
                a\
this gets inserted after the commented line
              }' /path/to/input > output

最後に、sedは出力をstdoutデフォルト値として書き込みます。元のファイルが破損する可能性があるため、すぐに元のファイルに再パイプすることはできません。また、「-i」スイッチ(GNU-sedなど)などの不快な項目は避けてください。これはPOSIXではなく、スクリプトの移植性を低下させるからです。これを行う方が安全でより良いです。

if sed '<your sed-script>' input > output ; then
     mv output input
else
     print -u2 - "sed malfunction, check output"
     exit 1
fi

関連情報