Grep: 발견되면 던지고 출력 표시

Grep: 발견되면 던지고 출력 표시

나는 이 두 가지를 함께 작동시키려고 노력하고 있습니다.

  1. grep발견되면 오류 코드 1로 종료합니다.
  2. 전체 출력 또는 일치하는 행을 표시합니다.

이제 첫 번째 항목이 생겼습니다. grep이 일치하면 1로 종료됩니다. 하지만 피드백을 어떻게 표시할 수 있나요 stdout?

발견되면 명령이 실패합니다.grep -vz hello

예상되는 동작:

( allin이 포함된 Makefile)

< Makefile grep -<magic> all

CFLAGS = -Wall -Wextra -Werror
all: $(NAME)
re: fclean all
.PHONY: all clean fclean re

exit 1
< Makefile grep -<magic> nothing

exit 0

감사해요

답변1

다음과 같은 것을 원하는 것 같습니다.

! grep -q -e "$expr" <"$file" || ! cat <"$file"

가설의 정규식은 $expr주어진 파일의 어느 곳에서도 일치하지 않습니다 $file. 이 경우 초기 grep -q종료 상태는 0이 아닌 종료 상태로 종료되며, 이는 이전 종료 상태에 의해 무효화되어 !최종 종료 상태가 0이 됩니다. OR 목록의 두 번째 부분은 실행되지 않습니다. 출력이 없습니다.

반면, grep -q명령이 일치하는 항목이 있으면 OR 목록의 두 번째 부분을 트리거하여 파일을 출력 cat하고 종료 상태를 0으로 무효화하여 종료 상태를 0이 아닌 값으로 설정합니다 cat.

DeMorgan의 법칙을 사용하여 부정 AND 목록으로 재구성됩니다.

! ( grep -q -e "$expr" <"$file" && cat <"$file" )

관련 정보