web-dev-qa-db-ja.com

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.
66
Lmedza

「-」を引数としてviまたはvimを実行すると、編集するファイルが標準入力から読み取られます。したがって:

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

あなたが必要なことをします。

114
Petr Uzel

_vim -_のほかに、<(command)構文を使用してプロセス置換を使用することもできます。次に例を示します。

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

以下も参照してください。

12
kenorb

output redirection を使用する必要があります:

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

また、あなたのgrepは改善できると思います:

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

出力のリダイレクトも次のように使用できます。

vi <(grep ...)

複数のコマンド出力でさえ、別のファイルに保存されているかのようにリダイレクトできます。

vim -d <(ls) <(ls -a)
5
musa

~/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
1
jthill

Vi(m)内またはvi(m)外のいずれかで、目的の操作を行うための効果的な方法が多数あります。

コマンドを実行し、(一時的な)ファイルを作成して、ファイルを編集します( Joseph R.の回答を参照

grep -e"Peu[gG]eot" carlist.txt && vi /tmp/peugeot.txt

コマンドを(バックグラウンドで)実行して一時ファイルを作成し、「:e!」を使用してファイルを編集します。生成されたファイルを更新するには(これは、ログファイルや、cronなどの別のプロセスによって生成されている他のファイルに役立ちます)、

grep -e "Peu[gG]eot" carlist.txt > /tmp/peugeot.txt &
vi /tmp/peugeot.txt

Vi(m)を実行し、子プロセスを実行して一時ファイルを作成し、それを読み取ります。

vi
:!grep -e "Peu[gG]eot" carlist.txt > /tmp/peugeot.txt
:r /tmp/peugeot.txt

または、ファイルに切り替えて、

:e /tmp/peugeot.txt

Vi(m)を実行し、ダブルバング「!!」を使用しますviに子コマンドを実行させ、結果を取得して現在の場所に挿入します(現在の行を上書きするため、空白行があることを確認してください)。

vi
i
here
empty
there
<esc>
kk
!!grep -e "Peu[gG]eot" carlist.txt

そして今、あなたは(あなたが望むなら)ファイルを任意のファイル名に書き込むことができます、

:w /tmp/someotherfilename.txt

そして Petr Uzelの答え も良いです、

grep -e "Peu[gG]eot" carlist.txt | vi -

Stdinから読み取る

0
ChuckCottrill