使用 sed 编辑 crontab

2023-11-25

我正在编写一个 sed 命令,该命令应取消注释 crontab 中的条目。有一个更好的方法吗?我想到的第一个选项是 sed。

Example:

crontab -l

# 5 * * * 3 bash test.sh

sed 命令应取消注释该条目。这就是我现在所拥有的。

sed "s#\# 5 * * * 3 bash test.sh#5 * * * 3 bash test.sh#"

显然这个 sed 命令不执行该任务。

ps:sed 命令最终将进入脚本。


Sed 非常适合匹配特定的正则表达式并以某些方式操作文本,但在我看来这并不是其中之一。虽然您可以使用 sed 来完成此任务,但结果可能过于复杂和脆弱。

您最初的尝试是:

sed "s#\# 5 * * * 3 bash test.sh#5 * * * 3 bash test.sh#"

这会失败,因为*字符是正则表达式中的特殊字符,被翻译为“零个或多个前一个原子”(在本例中为空格)。严格来说,您可以通过转义正则表达式中的星号(替换模式中不需要)来使此 sed 脚本正常工作。

但这仅对这种特定模式有帮助。如果您的一位同事决定在下班后 6 分钟而不是 5 分钟运行此脚本,以避免与另一个脚本发生冲突,该怎么办?或者评论字符后面有一个空格?突然你的 sed 替换失败了。

取消注释every评论有问题的脚本的出现,您可以使用:

crontab -l | sed '/# *\([^ ][^ ]*  *\)\{5\}[^ ]*test\.sh/s/^# *//' | crontab -

如果您使用的是更现代的 sed,您可以用稍短的 ERE 替换此 BRE:

crontab -l | sed -E '/# *([^ ]+  *){5}[^ ]*test\.sh/s/^# *//' | crontab -

这需要输出crontab -l,这显然是您完整的 crontab,使用 sed 操作它,然后根据其输出编写一个新的 crontabcrontab -。 sed 脚本匹配搜索与有效 crontab 匹配的行(以避免仅提及您的脚本的实际注释),然后进行简单的替换以仅删除开头的注释字符。匹配的模式如下所示:

  • # *- 匹配注释字符后跟零个或多个空格
  • ([^ ]+ +){5}- 五个非空格字符串,后跟空格
  • [^ ]*- 任意数量的非空格字符,这会导致:
  • test\.sh- 你的脚本。

但请注意,这不匹配all有效的 crontab 时间,其中可能包括诸如@reboot, @weekly, @midnight等查看man 5 crontab了解详情。


非 sed 替代品,例如awk可能是有序的。以下 awk 解决方案对我来说更有意义:

crontab -l | awk -v script="test.sh" '
  { field=6 }
  /^# / { field++ }
  index($field,script) { sub(/^#/,"") }
  1' \
| crontab -

虽然它有点长,但我发现它更容易阅读和理解。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 sed 编辑 crontab 的相关文章

随机推荐

  • Rails:从控制器调用另一个控制器操作

    我需要从控制器 B 调用控制器 A 中的创建操作 原因是当我从控制器 B 调用时 我需要以不同的方式重定向 可以在 Rails 中完成吗 要使用另一个控制器 请执行以下操作 def action that calls one from an
  • 点击按钮时忽略 UIGestureRecognizer

    我设置了一个手势识别器 以便在点击屏幕时我的工具栏会向下滑动 当我点击栏上的按钮时 即算作一次点击 在这些情况下如何取消手势 Thanks 您可以查看 Simple GestureRecognizers 示例项目 http develope
  • 两个字符串之间的所有公共子字符串

    我正在使用 C 来查找两个字符串之间的所有公共子字符串 例如 如果输入是 S1 需要电子邮件方面的帮助 S2 需要电子邮件帮助 输出应该是 需要帮助电子邮件 下面的代码返回最长的公共子字符串 但我希望我的代码返回所有公共子字符串 任何帮助深
  • 像 Whatsapp 一样快速视频压缩

    我需要加快 Android 应用程序中的视频压缩速度 我使用的是 FFMPEG 压缩 80MB 视频需要 3 分钟 有谁知道更好的解决方案 我正在使用的命令是 data data com moymer app bin ffmpeg y i
  • 旋转图像并裁剪掉黑色边框

    我的应用程序 我正在尝试旋转图像 使用 OpenCV 和 Python 目前我已经开发了下面的代码 它旋转输入图像 用黑色边框填充它 给我 A 我想要的是 B 旋转图像内最大可能的区域裁剪窗口 我将其称为轴对齐的有界框 这本质上是相同的旋转
  • 如何在Excel中提取最后一个下划线之后的字符串的最后一部分

    我有以下示例数据 1 animated brand 300x250 2 animated brand 300x600 3 customaffin greenliving solarhome anim outage offer 如何在 Mic
  • 在.NET API中添加对PresentationCore.dll和PresentationFramework.dll的引用

    我试图在 NET 5 API 中引用PresentationCore dll 和PresentationFramework dll 但显然它还需要WindowsBase 这是我得到的错误 System TypeLoadException 无
  • 使用 data: URI 时有没有办法指定建议的文件名?

    例如 如果您点击链接 data application octet stream base64 SGVsbG8 浏览器将提示您下载一个文件 该文件包含超链接本身中以 Base64 形式保存的数据 有什么方法可以在标记中建议默认名称吗 如果没
  • 解析 - 使用关系与指针?

    我使用 Parse 作为我的后端 我在设置对象之间的正确关系时遇到问题 我基本上有一个名为 Post 的类 每个帖子都属于一个用户 PFUser 当获取帖子时 我希望用户信息与帖子一起获取 interface Post PFObject
  • gRPC Java 文件下载示例

    我正在寻找一种如何使用 gRPC 实现文件下载功能的方法 但我在文档中找不到这是如何完成的 做到这一点的最佳方法是什么 我想要一个保存文件的 gRPC 服务器和一个向 gRPC 请求某些内容的 gRPC 客户端 我已经查看了 Java 中的
  • 在 SwiftUI 中设置 TextField 的初始值 - 比较新旧值

    我看过很多有关如何使用空 TextField 来收集新值的示例和教程 但没有一个展示如何使用 TextField 来编辑值 在我的用例中 我希望用视图模型中的数据预填充 预填充 TextField 然后当用户编辑数据时 应启用 保存 按钮
  • matlab 将绘图导出为矢量格式

    之前我一直以光栅格式 JPG PNG 导出 Matlab 图形 有没有办法以矢量格式 SVG 从 Matlab 导出绘图 我需要它来将绘图插入 LaTeX 文档中 到目前为止我发现的唯一的东西是来自数学工作和答案堆栈交换 但这看起来太复杂了
  • 在哪里可以找到所有可用的带有 selenium 的 ChromeOptions 的列表?

    在哪里可以找到所有可用的带有 selenium 的 Chrome 选项的列表 在 python 环境中使用 selenium 进行爬行时 我必须在 chrome webdriver 中使用 flash 所以我试图找到一个允许 Flash 的
  • 提高 PHP GD 生成图像的质量

    我将开始使用 GD 库在 PHP 中构建地图生成器 我使用该库生成了一些图像 但它们的质量不佳 我只是想知道有什么方法可以提高图像质量 生成的图像是 我制作的代码是
  • 将阿拉伯语数据插入mysql数据库

    我尝试输入阿拉伯语文本并使用 php 将其插入到 mysql 数据库中 当打印该行时 阿拉伯语中的所有行如下所示 1 我将数据库设置为 字符集 utf8 UTF 8 Unicode 排序规则 utf8 general ci 以及数据库中的每
  • 使用复杂类型查询 Spark SQL DataFrame

    如何查询具有复杂类型 例如映射 数组 的 RDD 例如 当我编写这个测试代码时 case class Test name String map Map String String val map Map hello gt world hey
  • Zend Framework 2 - BjyAuthorize 始终拒绝访问

    我已经设置了bjyoungblood bjy authorize模块 但我目前正在得到一个403除在配置文件中配置的 URL 之外 每个 URL 都会出现 访问被拒绝 错误home route My module byjauthorize
  • 在烧瓶应用程序中保留全局状态[重复]

    这个问题在这里已经有答案了 我正在尝试将缓存字典保存在我的flask应用 据我了解 应用上下文 特别是烧瓶 g 对象应该用于此目的 Setup import flask as f app f Flask name 现在如果我这样做 with
  • 如何引用同一 appsettings.json 文件中的另一个值?

    我需要在 appsettings json 中的两个位置使用数据库连接字符串 是否可以在 json 文件中引入公共变量或 json path 相关引用以避免潜在的问题 如果能在不接触 C 代码的情况下拥有它 那就太棒了 Connection
  • 使用 sed 编辑 crontab

    我正在编写一个 sed 命令 该命令应取消注释 crontab 中的条目 有一个更好的方法吗 我想到的第一个选项是 sed Example crontab l 5 3 bash test sh sed 命令应取消注释该条目 这就是我现在所拥