我的目标是创建一个脚本,对crontab进行以下更改。任何未注释的cron条目都会被注释,而任何注释的条目都会被注释掉。我的crontab注释中没有数字,所以我相信我提出的逻辑是合理的:
1)备份crontab 2)更改crontab
我特别需要第2步的帮助。我用它来评论所有行,但我发现很难再进一步:
sed -i 's/^\([^#]\)/#\1/g' Crontab.txt
有人会对上述目标有任何建议吗?我很感激任何帮助。
答案 0 :(得分:3)
您可以使用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
之后添加该字符即可。)
答案 1 :(得分:0)
我建议分三步完成:
#
#