在 vi 缓冲区中使用 sed

在 vi 缓冲区中使用 sed

在列出 dups-23Mar16.listing 的长文本文件中,我想删除以 开头的行.local。以下是此文件中的一些行:

Desktop/Reisen/Italien/VillaLaBandita/images-hpz-urlaub/cimg0429.jpg
Desktop/Tiere/Italien/VillaLaBandita/images-hpz-urlaub/cimg0429.jpg
.local/share/files/eksteuer/ekst.odt

从此文件外部我可以使用命令执行此操作

sed  -e '/^\.[a-z]/d' dups-23Mar16.listing

在 vi 缓冲区中

:%!sed  -e '/^\.[a-z]/d'

如果我想删除以 Desktop 开头的行,我成功了

:%!sed  -e '/^Desktop/d'

我怎样才能将这两个命令合并为一个?我试过了

:%!(sed  -e '/^\.[a-z]/d';sed -e '/^Desktop/d')

但这不起作用。有什么解决办法吗?

答案1

如果你真的想要,你可以简单地给出多个-e参数sed像这样:

:%!sed -e '/^\.[a-z]/d' -e '/^Desktop/d'

我只是不知道你是否想获得一些经验sed或者你不知道里面vim, 有编辑无所不知sed可以做更多...并且不需要启动不必要的过程:

g/^\(\.[a-z]\|Desktop\)/d

答案2

如果您想在 vi 缓冲区命令行上执行此操作,则应该可以工作 - 无需 sed:

:exe 'g/^Desktop/d'|g/^\.[a-z]/d

竖线分隔 vi 命令行上的多个命令。g处理整个缓冲区,因为正则表达式应限定删除命令以处理匹配的每一行。exe和引号是必需的,以防止出现全局递归错误。

相关内容