sed:在crontab中切换注释 [英] sed: toggle comments in crontab

查看:25
本文介绍了sed:在crontab中切换注释的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的目标是创建一个脚本,该脚本对crontab进行以下更改。任何未注释的cron条目都会被注释,而任何注释的条目都会被取消注释。我的crontab注释中没有数字,所以我相信我列出的逻辑是合理的:

1)备份crontab 2)更改crontab

  • 如果该行以任何数字开头,请注释该行
  • 如果该行以注释开头,后跟数字,请取消该行的注释 3)重新加载crontab。

我特别需要有关步骤2的帮助。我已使用此命令注释所有行,但我发现很难获得进一步的帮助:

sed -i 's/^([^#])/#1/g' Crontab.txt

有没有人对我实现上述目标有什么建议?如有任何帮助,我将不胜感激。

推荐答案

您可以使用sed轻松切换注释。

sed -i '# If line is a comment, uncomment
    # (replace s with [    ] if your sed does not support s for whitespace)
    s/^s*#//
    # If the previous action did something, skip the rest
    t
    # If we are still here, comment out this entry
    s/^/#/' Crontab.txt
如果您的sed方言听不懂s,您可以使用注释中的替代[...]表达式。(这是括号内的空格和制表符。您可以在许多shell中使用ctrl-V选项卡输入文本制表符。)

若要仅切换第一个非注释字符是数字的位置,请稍微调整正则表达式。

sed -i 's/#([0-9])/1/;t;s/^([0-9])/#1/' Crontab.txt
同样,也存在一些方言变体;并不是所有的sed实现都需要在分组圆括号前使用反斜杠,也不是所有的sed实现都需要使用分号作为语句分隔符。这里的主要目的是使用反向引用来捕获数字并在替换中引用它。

(在crontab条目的第一个字段中,星号也是允许的字符;如果要包括星号,只需在两个位置的0-9之后添加星号即可。)

这篇关于sed:在crontab中切换注释的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆