在 vi 缓冲区中使用 sed

Ler*_*tov 3 bash vim sed command-line

在列出 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
Run Code Online (Sandbox Code Playgroud)

从这个文件的外部,我可以用命令来做到这一点

sed  -e '/^\.[a-z]/d' dups-23Mar16.listing
Run Code Online (Sandbox Code Playgroud)

并在 vi 缓冲区中

:%!sed  -e '/^\.[a-z]/d'
Run Code Online (Sandbox Code Playgroud)

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

:%!sed  -e '/^Desktop/d'
Run Code Online (Sandbox Code Playgroud)

如何将两个命令合二为一?我试过

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

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

Gom*_*dor 6

如果你真的想要,你可以简单地给sed多个-e参数,如下所示:

:%!sed -e '/^\.[a-z]/d' -e '/^Desktop/d'
Run Code Online (Sandbox Code Playgroud)

我只是不知道你是否只是为了在sed 中获得一些经验,或者你不知道在vim 中,有一个ed知道sed所做的一切等等......并且没有启动不必要的过程:

g/^\(\.[a-z]\|Desktop\)/d
Run Code Online (Sandbox Code Playgroud)