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
$VISUAL
sh
perl
CODE
sh
LINE
perl
明らかにこれ視覚的ここで使用しているエディタは$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