如何将 grep 搜索的结果通过管道传输到新的 vi 文件中

如何将 grep 搜索的结果通过管道传输到新的 vi 文件中

我用来grep -e Peugeot -e PeuGeot carlist.txt搜索 carlist.txt 并取出一些项目,我认为这grep -e Peugeot -e PeuGeot carlist.txt | vi会为我通过管道,但这就是我得到的:

Vim: Warning: Input is not from a terminal
Vim: Error reading input, exiting...
Vim: preserving files...
Vim: Finished.

答案1

使用“-”作为参数运行 vi 或 vim 会使其从标准输入读取要编辑的文件。因此:

grep -e Peugeot -e PeuGeot carlist.txt | vi -

会做你需要的。

答案2

除此之外vim -,您还可以使用以下语法使用进程替换<(command),例如:

vim <(echo This is example.)
vim <(cat /etc/hosts)

也可以看看:

答案3

你应该使用输出重定向:

grep ... > newfile.txt && vi newfile.txt

另外,我认为你的grep可以改进:

grep 'Peu[gG]eot' carlist.txt > newfile.txt && vi newfile.txt

答案4

~/bin/r

#!/bin/sh
[ $# -eq 0 ] && set -- -;
exec vi -R "$@"

~/.vimrc

:  au StdinReadPost * set buftype=nofile

然后:

ls |r
grep -e Peugeot -e PeuGeot carlist.txt | r

我有

r- () { "$@" | r; }

在我的~/.bashrc,所以

r- ls -l

相关内容