텍스트 파일이 있고 search_string은 있지만 Except_string은 없는 줄을 검색하고 싶습니다.
터미널에서 다음은 내가 원하는 출력을 제공합니다.
grep "search_string" | grep -v "\(exclude_string_A\|exclude_string_B\)"
텍스트 파일에서 특정 문제(주로 grep 및 sed 사용)를 검색하는 bash 스크립트가 있는데 이 검색을 여기에 추가하고 싶지만 제대로 작동하지 않는 것 같습니다. 첫 번째 grep 명령의 출력은 두 번째 명령의 입력으로 사용되지 않는 것 같습니다.
예를 들어 다음을 포함하는 파일의 경우:
Gary: yes, that's what I said.
Paul: well, I didn't hear you.
Gary: okay, let's go.
Bash 스크립트에서 관련 줄은 다음과 같습니다.
grep "Gary:" | grep -v "\(said\|told\)" $1
그러나 출력 파일에는 다음 부분이 포함되어 있습니다.
Paul: well, I didn't hear you.
Gary: okay, let's go.
여기에 뭔가 간단한 누락이 있기를 바랍니다!
답변1
귀하의 생각은 정확하지만 입력 파일/문자열 매개변수가 잘못된 위치에 있습니다. 그것은 다음과 같이 작성되어야합니다
grep "Gary:" "$1" | grep -v "\(said\|told\)"
이는 grep
일치하는 첫 번째 표현식을 적용하는 것을 의미합니다.모두or라는 단어가 포함된 줄 Gary
과 said
or라는 단어가 포함된 줄을 필터링합니다 told
.
파이프를 사용하여 실행하면 두 프로세스가 모두 시작되지만 grep
파이프를 통해 stdin에서 입력을 가져와 표시되는 몇 줄을 인쇄하는 대신 입력 이후의 부분이 파일인 것처럼 처리됩니다.|
$1
grep
그러나 이 시점에서는 첫 번째 터미널이 여전히 표준 입력 스트림에서 입력을 기다리고 있지만 입력이 표시되지 않기 때문에 터미널이 정지되는 것을 볼 수 있습니다 . Ctrl-CSIGINT 신호를 보내 려면 누르세요 . 최종적으로 파이프라인이 종료됩니다.