如何使用sed或awk编辑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

我有如下示例crontab文件。我想写一个脚本,如果作业未被注释,则对其进行注释。它应该用
#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"