Bash sed从cron中删除一行

时间:2013-06-24 12:23:37

标签: bash sed

有人看到这里的语法有什么问题吗?

CTMPESC=$(sed 's/[\*\.&]/\\&/g' <<<"$CTMP")
crontab -l | sed "/$CTMPESC/d" | crontab -

CTMP等同于这样的简单cron语句:

*/8 * * * * cd /home/administrator/anm-1.5.0 && ./anm.sh

我不断收到错误消息:

sed:-e表达式#1,字符5:未知命令:'8'

2 个答案:

答案 0 :(得分:2)

如果您想以利用bash功能的方式执行此操作,则根本不需要外部工具,例如grep或sed:

ctmp_content=$(<"$ctmp")
crontab -l | while read -r; do
  [[ $REPLY = *"$ctmp_content"* ]] && continue
  printf '%s\n' "$REPLY"
done | crontab -

答案 1 :(得分:1)

这里发生的是CTMPESC中的一个斜杠关闭了模式,并且在它被解释为命令之后发生了什么。你也需要逃避斜杠。

/添加到您转义的字符类中:

CTMPESC=$(sed 's/[\*\.&/]/\\&/g' <<<"$CTMP")