zsh 변수에서 grep을 실행하는 방법은 무엇입니까?

zsh 변수에서 grep을 실행하는 방법은 무엇입니까?

다음 두 명령을 인라인하고 싶습니다.

big_query_that_returns_text > in.txt
$ printf '%s\n' "foo" "bar" | grep -f /dev/stdin in.txt

foo찾아서 bar작동합니다 .in.txt

하지만 내가 시도할 때

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

나는 받았다

zsh: argument list too long: grep

나도 시도했다

var=`big_query_that_returns_text`
printf '%s\n' "foo" "bar" | grep -f /dev/stdin $var
printf '%s\n' "foo" "bar" | grep -f /dev/stdin "$var"

하지만 같은 오류가 발생합니다.

답변1

이것은 장소입니다프로세스 교체: 파일과 같은 코드 블록입니다.

대규모 쿼리 결과를 grep의 stdin으로 파이프

big_query_that_returns_text | grep -f <(printf '%s\n' "foo" "bar")

"foo" 및 "bar"를 생성하는 명령이 더 복잡한 경우 프로세스 대체에서 임의의 줄바꿈을 사용하여 가독성을 높일 수 있습니다.

big_query_that_returns_text \
| grep -f <(
      printf '%s\n' "foo" "bar"
  )

답변2

기본적으로 일부 명령의 출력인 foozsh 변수를 검색하려는 것 같습니다 . bar왜 검색 문자열을 파이핑하는 추가 방법을 사용하는지 잘 모르겠습니다 grep.

big_query_that_returns_text | grep -E "foo|bar"

big_query_that_returns_text출력을 여러 위치에서 사용하여 쉘 변수에 저장하려는 경우에도 다음을 사용할 수 있습니다.

var=$(big_query_that_returns_text)

printf '%s\n' "$var" | grep -E "foo|bar"

... (other operations on $var) ...

여기를 사용하세요 printf '%s\n'. 다른 대안은 여기 문서 또는 여기 문자열을 사용하는 것 print -r -- "$var"입니다 . echo -E - "$var"모두 printf, printecho가 내장되어 있으므로 zsh얻을 수 없습니다.매개변수 목록이 너무 깁니다.오류는 시스템 호출 제한이므로 실행된 외부 명령(예: 내장 명령 아님 ) execve()에만 적용됩니다 .grepzsh

관련 정보