使用编辑器需要一些帮助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”的缩写(参见参考资料)。vim
vim
v
\v
:help magic
vim
在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/^/#/'