使用Sed命令修改指定Cronjob时出现星号重复问题求助
问题解决:sed修改Cronjob出现多余星号的问题
问题原因
你的sed命令中,*是正则表达式的元字符(表示匹配前面的元素零次或多次),未转义的情况下,sed会将* * * * *解析为匹配任意数量的*和空格组合,导致匹配时捕获了多余的星号,最终替换后出现重复的*。
修正方案
方案1:转义元字符并复用匹配内容
将模式中的所有*转义为\*,同时用&复用匹配到的完整内容,避免重复输入长串路径:
sed -i 's|\* \* \* \* \* root /apps/filebeat-cybersoc-3/config_updater.sh|& > /apps/filebeat-cybersoc-3/logs/config_updater.log|' /etc/cron.d/filebeat-cybersoc-3
方案2:定位目标行后追加内容(更简洁可靠)
先通过正则定位目标行,再在行尾追加重定向语句,这种方式不需要重复写完整的行内容,更不易出错:
sed -i '/^\* \* \* \* \* root \/apps\/filebeat-cybersoc-3\/config_updater.sh$/s/$/ > \/apps\/filebeat-cybersoc-3\/logs\/config_updater.log/' /etc/cron.d/filebeat-cybersoc-3
/^...$/确保匹配整行内容,避免误改其他相似行s/$/.../表示在行的末尾($)追加指定内容
验证结果
执行修正后的命令后,Cronjob内容会变为预期的:
* * * * * root /apps/filebeat-cybersoc-3/config_updater.sh > /apps/filebeat-cybersoc-3/logs/config_updater.log
内容的提问来源于stack exchange,提问作者hakim arqib
相关产品推荐
相关产品推荐

