在列出 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
和引号是必需的,以防止出现全局递归错误。