如何使用sed或awk编辑crontab文件,其中替换模式的行,或者保持原样
我有如下示例crontab文件。我想写一个脚本,如果作业未被注释,则对其进行注释。它应该用如何使用sed或awk编辑crontab文件,其中替换模式的行,或者保持原样,awk,Awk,我有如下示例crontab文件。我想写一个脚本,如果作业未被注释,则对其进行注释。它应该用#HC#注释。文件应包含所有行,但仅更改符合条件的行。我想向这个脚本传递两个参数 H5TEMP-要搜索的单词 #HC#-注释标签 例如,disable_cronjob.sh H5TEMP#HC# 当前文件: #===================================== #Backup Status Report H5TEMP 0 8 * * * /app/oracle/admin/scr
#HC#
注释。文件应包含所有行,但仅更改符合条件的行。我想向这个脚本传递两个参数
-要搜索的单词H5TEMP
-注释标签#HC#
disable_cronjob.sh H5TEMP#HC#
当前文件:
#=====================================
#Backup Status Report H5TEMP
0 8 * * * /app/oracle/admin/scripts/backup_report.sh > /dev/null 2>&1
0 8 * * * /app/oracle/admin/scripts/backup_report.sh H5TEMP > /dev/null 2>&1
#=====================================
输出文件:
#=====================================
#Backup Status Report H5TEMP
0 8 * * * /app/oracle/admin/scripts/backup_report.sh > /dev/null 2>&1
#HC#0 8 * * * /app/oracle/admin/scripts/backup_report.sh H5TEMP > /dev/null 2>&1
#=======================================
我尝试使用下面的命令,它只更改所需的行。但我需要的文件与上面完全相同:
awk '/H5TEMP/ && ! /^#/ { print "#HC#" $0 }' < file
awk'/H5TEMP/&&!/^#/{打印“#HC#”$0}”<文件
我可以直接更改crontab文件吗?如果没有,则将创建临时文件并更新crontab文件。
/etc/crontab
不用于自动操作。这可能变得脆弱和危险,尤其是当多个并发软件包对其进行操作时
对于cron作业的自动操作,强烈建议您使用文件夹
/etc/cron.d
(和朋友)。每个文件都有一个cronjob,您可以通过添加、覆盖或删除文件来轻松地操作它们/etc/cron.d
就是这个意思。你打给awk的电话差一点就到了。试试这个:awk'/^[^#].*H5TEMP/{printf“#HC#”}{print$0}
(不使用那种
&&!
语法,因为它似乎不可移植)对讨厌的bash shebang投了反对票。然后,据我所知,甚至没有使用巴什主义,所以它毫无理由是不受欢迎的。。。
#!/bin/bash
# validate arguments here ...
temp=$(mktemp)
crontab -l |
awk -v pattern="$1" -v comment="$2" '
BEGIN {exit_status = 1}
$0 ~ pattern && $0 !~ "^"comment {$0 = comment $0; exit_status = 0}
{print}
END {exit exit_status}
' > "$temp" &&
crontab "$temp"