vim替换crontab调度部分

时间:2018-11-21 07:41:21

标签: regex vim replace

我想用其他方式替换crontab中的*/5 * * * *(在我的情况下,我将整个crontab用管道传输到文件中,并希望完全删除这些部分以使其可作为Shell脚本执行) 我尝试了例如:

:%s/*\/5 * * * *//g->仅替换*/5部分,但保留* * * *

有人可以在这里帮助我吗?

1 个答案:

答案 0 :(得分:1)

:help :substitute中的offset是一个正则表达式;您不能简单地按原样插入文字搜索文本,而必须转义内容。特别是,您的命令中存在两个问题:

  • 您正在{pattern}中使用默认的/分隔符,但是在模式(:substitute)中也有此字符。 */5需要转义(/),或者您需要选择另一个分隔符(可以使用任何非字母数字的非空白ASCII字符,例如\/)。
  • :%s#...#...#g多项:help /star);除非它被转义,否则它本身不匹配,但表示前一个原子的多重性。同样,您可以转义每个实例(*),也可以将整个正则表达式切换为Vim中的“非常不可思议”模式,这意味着大多数字符都失去了特殊的含义,并按字面意义使用(反斜杠,仍然需要转义); :help /\V
  • 由于您希望模式仅在一行中出现一次,因此可以删除\*标志。要进一步确定模式,可以在前面添加“行首”锚点(/g)。这并不重要,但是可以防止意外的比赛。
  • 如果您现在要问为什么这种正则表达式语法会使事情变得如此复杂(字面搜索会容易得多),则不是这种情况。正则表达式的功能可以大大简化。例如,^的重复可以重写为*(任意重复)或\( \*\)\+(恰好四次)。 (尽管我不建议在您的示例中使用它,因为这会使它更加复杂并且不会保存键入内容。)

因此,这是两个变体(转义/不同的定界符和非常虚幻的模式):

\( \*\)\{4}