목록에서 세 가지 패턴을 찾고 싶습니다. 타자를 쳐본다
$ pip3 list | grep -ei foo -ei bar -ei baz
하지만 쉘은 a broken pipe error
와 큰 것을 던졌습니다 Traceback
.
grep
로 파이프된 목록에서 전달된 여러 스키마를 처리하는 방법은 무엇입니까 grep
?
답변1
노력하다:
pip3 list | grep -Ei 'foo|bar|baz'
내 Arch 서버의 실제 예는 다음과 같습니다.
pip3 list | grep -Ei 'ufw|set'
setuptools 40.0.0
ufw 0.35
운영 체제 및 grep
정보:
uname -a
Linux archlinux 4.16.6-1-ARCH #1 SMP PREEMPT Mon Apr 30 12:30:03 UTC 2018 x86_64 GNU/Linux
grep --version
grep (GNU grep) 3.1
Copyright (C) 2017 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Written by Mike Haertel and others, see <http://git.sv.gnu.org/cgit/grep.git/tree/AUTHORS>.
답변2
이유
grep -ei foo -ei bar -ei baz
-e
옵션의 의미가 -e PATTERN
다음과 같기 때문에 작동하지 않습니다 .
grep -i -e foo -e bar -e baz
...명령어는 다음과 같습니다. 이 -i
옵션(대소문자를 구분하지 않는 일치용)은 한 번만 지정하면 되며 모든 패턴에 영향을 미칩니다.
-ei foo
파일에서 grep
패턴을 찾도록 요청합니다 .i
foo
"깨진 파이프" 오류는 pip3
데드 파이프의 끝에 쓰려고 할 때 발생합니다. grep
파일 foo
또는 bar
을 찾을 수 없어서 파이프가 종료 baz
되고 종료되었습니다(3개의 "파일을 찾을 수 없음" 오류 발생). 역추적은 pip3
Python 프로그램에서 제공됩니다(따라서 Python 코드에서 오류가 발생한 위치를 정확하게 알려줍니다).