grep에 대한 다중 입력

grep에 대한 다중 입력

Unix grep에서 여러 입력을 사용할 수 있습니까? 이것이 내가 하고 싶은 일이다:

pip freeze설치된 모든 Python 패키지를 나열하지만 불행히도 해당 패키지의 종속성도 나열합니다.

cat requirements/base.txt내 프로젝트 패키지 나열

pip freeze | grep $(cat requirements/base.txt)나는 성공하지 못한 채 비슷한 것을 사용하려고 노력해 왔습니다 .

내가 관심 있는 패키지만 실제로 나열하기 위해 pip 동결을 필터링하는 방법을 아는 사람이 있습니까?

답변1

명령을 실행하려면 명령 대체 주위에 큰따옴표를 넣으십시오. 예를 들어 다음 base.txt파일을 고려해보세요.

$ cat base.txt
simplegeneric==0.8.1
six==1.10.0
sympy==1.1

따옴표가 없으면 명령은 일련의 오류를 생성합니다. 따옴표를 사용하면 잘 작동합니다.

$ pip3 freeze | grep "$(cat base.txt)"
simplegeneric==0.8.1
six==1.10.0
sympy==1.1

더 좋은 점은 정규식 구문에 익숙하지 않은 경우 grep이 각 줄을 일반 문자열로 -F해석하도록 이 옵션을 사용하는 것이 더 안전할 것입니다 . base.txt여기서는 아무런 차이가 없지만 앞으로의 놀라움을 피하는 데 도움이 될 수 있습니다.

$ pip3 freeze | grep -F "$(cat base.txt)"
simplegeneric==0.8.1
six==1.10.0
sympy==1.1

그래도 더 좋습니다(모자 팁:나시르 라일리-f), 다음을 사용하지 않고 파일에서 문자열을 읽으려면 이 옵션을 사용하십시오 cat.

$ pip3 freeze | grep -Ff base.txt
simplegeneric==0.8.1
six==1.10.0
sympy==1.1

관련 정보