입력 스트림의 인수를 구문 분석하기 위해 grep을 여러 번 실행하는 방법은 무엇입니까?

입력 스트림의 인수를 구문 분석하기 위해 grep을 여러 번 실행하는 방법은 무엇입니까?

"foo", "bar"입력 파이프라인이 CSV 형식의 단어 목록이라고 상상해 보세요.

"foo"그런 다음 이 파일 같은 것이 있고 여기에 (1) 또는 "bar"(2)가 포함되어 있는지 테스트하고 싶습니다. 예를 들면 다음과 같습니다.

echo "foo\nbar" | grep input.txt $0

출력에서 다음 두 가지 grep 작업의 결합된 결과를 얻고 싶습니다.

grep "foo" input.txt
grep "bar" input.txt

예:

input.txt = "foo1\nfoo2n\bar\n123"
output = "foo1\nfoo2n\bar\n"

모든 매개변수를 검색한다면 몇 번이나 실행되는지는 상관하지 않습니다.

답변1

-f파일에서 읽은 플래그를 파일 이름으로 사용할 수 있으며 /dev/stdin, 이는 표준 입력을 가리킵니다.

printf '%s\n' "foo" "bar" | grep -f /dev/stdin input.txt 

Grep의 일부 구현에서는 하이픈을 사용하여 -표준 입력을 나타내는 것도 허용합니다.

나는 또한 Echo보다 이식성이 더 좋기 때문에 Printf("foo"와 "bar"를 줄 바꿈으로 구분하여 인쇄함)를 사용했습니다. Bash Echo는 -e이 플래그를 \n개행 문자로 해석해야 합니다.

관련 정보