다음 두 명령을 인라인하고 싶습니다.
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
기본적으로 일부 명령의 출력인 foo
zsh 변수를 검색하려는 것 같습니다 . 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
, print
및 echo
가 내장되어 있으므로 zsh
얻을 수 없습니다.매개변수 목록이 너무 깁니다.오류는 시스템 호출 제한이므로 실행된 외부 명령(예: 내장 명령 아님 ) execve()
에만 적용됩니다 .grep
zsh