搜索字符串并将 # 添加到该行的开头

搜索字符串并将 # 添加到该行的开头

使用编辑器需要一些帮助vi

我正在尝试为特定用户注释掉 crontab 上的一行。

这是 crontab 上的许多其他行中的一行:

0,5,10,15,20,25,30,35,40,45,50,55 2-23 * * * /home/appuser/CPU_check.sh

所以我想在 vi 编辑器(crontab -e)中搜索字符串“CPU_check”,然后在行的开头添加 # add 将其注释掉。

最后,如果我需要在 vi 编辑器中使用两个字符串(例如 CPU_check 和 Memory_check)进行搜索,然后将 # 添加到包含字符串的每一行的开头。

答案1

在六中,

:g/CPU_check/s/^/#/

在哪里

  • :告诉 vi 进入命令模式
  • g不带 g 的 apply 'globaly' (适用于多行)仅适用于第一行。

  • /CPU_check/地址行匹配CPU_CHECK

  • s替代
  • /^/行首(与)
  • /#/ #符号

执行其他替换

保存并退出

:x

答案2

您明确表示您想要一个使用的解决方案vi。但这也可以通过单行 sed 指令来实现

sed -i -e 's/.*CPU_check/# &/' -e 's/.*Memory_check/# &/' crontab

此解决方案更改了内联文件。您可能希望通过在 sed 调用中将-i标志更改为来保存文件的备份。-i.bak

答案3

假设“ vi”你的意思是实际的 vi(不是vim):

:set extended
:g/(CPU|Memory)_check/s/^/#/

这首先在搜索模式中启用扩展正则表达式set extended,然后将替换s/^/#/#在行首插入 - 字符)应用于包含字符串CPU_check或 的所有行Memory_check

在 中vim,你可以使用

:g/\(CPU\|Memory\)_check/s/^/#/

或者

:g/\v(CPU|Memory)_check/s/^/#/

做同样的事情。

转义允许将模式识别为扩展正则表达式\v。它是“very magic”的缩写(参见参考资料)。vimvimv\v:help magicvim


ed不支持扩展正则表达式的情况下,您可以使用两个单独的编辑命令

g/Memory_check/s/^/#/
g/CPU_check/s/^/#/

通过sed其选项支持扩展正则表达式-E

sed -E '/(CPU|Memory)_check/s/^/#/'

或者,使用标准sed,

sed -e '/CPU_check/s/^/#/' -e '/Memory_check/s/^/#/'

相关内容