Shell脚本中匹配模式后删除该行及后续7行的方法
解决Vim/Shell脚本中删除匹配行及其后7行的问题
嘿,我刚好知道怎么解决这个问题!你用的是Vim的Ex命令对吧?之前的:g/profile/d只能删除匹配单行,要连带该行之后的7行一起删除,只需要给全局命令加上范围参数就行:
核心Vim Ex命令
直接在Vim的命令行模式下输入:
:g/profile/,+7d
命令拆解:
:g:全局遍历命令,会找到所有包含profile模式的行profile:你指定的匹配模式,如果要匹配完整单词(避免部分匹配,比如profiles也被命中),可以改成\<profile\>,+7:表示范围从当前匹配行(.,默认省略)开始,往后延伸7行,也就是匹配行 + 后续7行,总共8行d:执行删除操作
脚本批量处理(无需打开Vim交互)
如果要在Shell脚本里批量处理文件,不用手动打开Vim,可以用Vim的批量执行模式:
单行命令版
vim -c ':g/profile/,+7d' -c 'wq' 你的文件名
多行脚本版(更清晰)
vim -e -s 你的文件名 <<EOF :g/profile/,+7d :wq EOF
参数说明:
-c:让Vim执行后面紧跟的Ex命令-e:启用Ex模式(非交互的行编辑模式)-s:静默模式,不显示Vim的界面输出wq:保存修改并退出Vim
注意事项
- 如果匹配行位于文件末尾,后面不足7行,Vim会自动删除到文件结尾,不会报错
- 如果需要忽略大小写匹配,可以在模式前加
\c,比如:g/\cprofile/,+7d
内容的提问来源于stack exchange,提问作者user752590
相关产品推荐
相关产品推荐

