grep에서 반환되는 많은 양의 파일을 대량 편집하려고합니다. (나는 알아 차린다. 나는 sed를 더 좋아야한다.)grep에서 반환 된 모든 파일을 대량 편집 할 수 있습니까?
내가 그래서 경우 :
grep -rnI 'xg_icon-*'
어떻게 파이프 해당 파일의 모든 VI로합니까?
grep에서 반환되는 많은 양의 파일을 대량 편집하려고합니다. (나는 알아 차린다. 나는 sed를 더 좋아야한다.)grep에서 반환 된 모든 파일을 대량 편집 할 수 있습니까?
내가 그래서 경우 :
grep -rnI 'xg_icon-*'
어떻게 파이프 해당 파일의 모든 VI로합니까?
가장 쉬운 방법은 grep이 패턴과 일치하는 파일 이름 (-n
대신 -l
) 만 반환하도록하는 것입니다. 서브 쉘에서이를 실행하고 그 결과를 Vim에 제공하십시오.
vim $(grep -rIl 'xg_icon-*' *)
또한 vim은 표준 입력이 파이프에서 왔을 때 그것을 좋아하지 않으므로 위의 내용은 'grep -rIl ...보다 훨씬 낫습니다. 정력'. –
Vim은'vim -'으로 호출 할 때 표준 입력에 만족합니다 –
@ Kaleb vim은 파이프에서 오는 경우 매우 잘 작동합니다. 이 경우 xargs에 대한 호출을 잊지 마십시오. 파이프가 파일 이름이 아닌 내용으로 vim을 채울 때, 유료 머드가 귀하의 말에 답했습니다. 대시를 잊지 마십시오. –
이렇게 좋은 해결책은 xargs를 사용하여 stdout을 grep과 같은 프로세스에서 인수 목록으로 변환하는 것입니다.
알라는 :
grep -rIl 'xg_icon-*' | xargs vi
나를 위해 매우 도움이 대답은, 아니 때문에 적어도 일반화 프로그램은'vi'. (우리 중 일부는 그 부족이 아니지만이 다양성의 대부분의 질문은 그 방법을 공정하게 명시 적으로 가리 킵니다.) –
내 Mac (터미널에서)에서 vim과 함께 실행 한 후 터미널에 stdin과 관련된 몇 가지 문제가있었습니다. 다른 솔루션에서는 그렇지 않습니다. 캐릭터는 눈에 띄게 표시되지 않았습니다. 생각? –
당신이 편집하고자하는 모든 파일에서 유사한 경우, 다음 VI를 사용하여 아무 소용 수동으로 할 수 없습니다. (VI뿐만 아니라 스크립팅 할 수 있지만), 가설, 당신이 당신이 정력과 -p 옵션을 사용하는 경우
grep -rnI 'xg_icon-*' | while read FILE
do
sed -i.bak 's/old/new/g' $FILE # (or other editing commands, eg awk...)
done
을 편집 할 것을 언급하지도, 그것은 각각의 파일을 엽니 다, 다음과 같이 보입니다 탭을 사용하면 gt 또는 gT를 사용하여 전환 할 수 있습니다. 터미널에서 마우스를 지원하는 경우 마우스를 사용할 수도 있습니다.
고마워요! 이 기능은 정말 멋지다! – ep3static
grep 출력을 처리하지 않고도 수행 할 수 있습니다! 이렇게하면 올바른 행으로 이동할 수도 있습니다 (:help quickfix
명령 사용, 예 : :cn
또는 :cw
). 당신이 떠들썩한 파티 또는 zsh을 사용하는 경우 그래서, :
vim -q <(grep foo *.c)
vim -q -c copen <(grep foo * .c)가 더 나은 것으로 보입니다. – lkraav
vi `grep -l -i findthisword *`
하지만 한 번에 단지 개방 한 파일을 vi를하지 않는 이유는 무엇입니까? –
아니요. 여러 파일을 한 번에 열 수 있습니다. 다음 명령과 : prev는 인수 목록을 순환합니다. 실제 vi에서는 파일을 변경하기 전에 저장해야합니다. Vim을 사용하면 ": 숨김 설정"을 사용하여 먼저 저장하지 않고도 버퍼를 변경할 수 있지만 저장되지 않은 변경 사항을 사용하여 종료하려고하면 경고 메시지가 표시됩니다. 또한 Vim은 : bnext와 : bprev 명령을 사용하여 인수 목록의 상위 집합 인 버퍼 목록을 검색합니다. – jamessan
한 가지 언급할만한 점은 vim을 사용하여 엄청난 수의 파일을 편집하는 경우 BufExplorer vim 플러그인과 같은 것을 사용하여 열려있는 버퍼를 검토하고 그 사이를 신속하게 넘겨 볼 수 있다는 것입니다. – Benj