[unix] grep 검색 결과를 새로운 vi 파일로 파이프하는 방법

grep -e Peugeot -e PeuGeot carlist.txtcarlist.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.



답변

‘-‘를 인수로 사용하여 vi 또는 vim을 실행하면 표준 입력에서 편집 할 파일을 읽습니다. 금후:

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

필요한 것을 할 것입니다.


답변

출력 리디렉션을 사용해야 합니다 .

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

또한, 나는 당신 grep이 향상 될 수 있다고 생각합니다 .

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


답변

이외에 다음과 vim -같은 <(command)구문을 사용하여 프로세스 대체를 사용할 수도 있습니다 .

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

또한보십시오:


답변

다음과 같이 출력 리디렉션을 사용할 수도 있습니다.

vi <(grep ...)

마치 별도의 파일에 저장된 것처럼 여러 명령 출력을 리디렉션 할 수 있습니다.

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


답변

에서 ~/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


답변

vi (m) 내에서 또는 vi (m) 외부에서 원하는 것을 수행하는 효과적인 방법이 많이 있습니다.

명령을 실행하고 (임시) 파일을 만든 다음 파일을 편집 하십시오 (Joseph R. ‘s answer 참조 )

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

그리고 페트르 UZEL의 대답은 ,도 좋다

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

stdin에서 읽는 것


답변