파일에서 "다른 용어 포함" 및 "다른 용어 제외"를 grep하는 방법은 무엇입니까?

파일에서 "다른 용어 포함" 및 "다른 용어 제외"를 grep하는 방법은 무엇입니까?

해당 용어를 포함하고 다른 용어를 제외해야 하는 grep 검색을 구축하려고 합니다. 여러 -E "pattern" 옵션을 사용하려고 시도했지만 작동하지 않았습니다.

다음은 제가 시도한 명령의 예입니다.

grep -Ei "\,17\:31" | grep -Eiv "10\.10\.210\.154" file.csv

그러나 출력 결과는 두 번째 제약 조건인 grep -Eiv "10.10.210.154"와만 일치합니다.

답변1

\,17\:31IP에서 찾지 않고 찾고 싶다고 가정10\.10\.210\.154

이것을 사용할 수 있습니다.

grep -Ei "\,17\:31" file.csv | grep -Eiv "10\.10\.210\.154" 

답변2

메모:다른 대답작동해야 하지만 아무것도 설명하지 않습니다. 그러므로 나의 설명적인 대답.

grep두 번째 사람에게 를 읽으라고 말씀하셨으니 file.csv그렇습니다. 표준 입력은 grep파일에 대해 작동할 때 수행되는 작업이므로 무시합니다 .

실제로 두 번째는 grep첫 번째가 없었던 것처럼 작동합니다. 파일을 처리하고 출력(있는 경우)을 인쇄한 후 종료됩니다.

첫 번째는 grep입력을 기다립니다(대화형 셸에서 실행되는 경우 일반적으로 키보드에서 입력). 파이프 버퍼가 출력을 두 번째 grep. 그런 다음 두 번째 항목이 grep더 이상 없으면 첫 번째 항목에 grep파이프가 파손되었음을 알립니다. 종료됩니다.

Ctrl또는 +를 눌러 D입력이 끝났음을 나타낼 수도 있습니다. 또는 Ctrl+를 눌러 첫 번째 (아직 살아 있는 경우 두 번째도)를 C죽일 수 있습니다. grep하지만 이렇게 해도 데이터 흐름이 수정되지는 않습니다.

적절한 데이터 흐름은 다음과 같습니다. 첫 번째 grep파일을 읽은 다음 결과를 두 번째 파일로 파이프해야 합니다.

grep -Ei "\,17\:31" file.csv | grep -Eiv "10\.10\.210\.154"
# or
<file.csv grep -Ei "\,17\:31" | grep -Eiv "10\.10\.210\.154"

후자의 구문에는 최소한 한 가지 장점이 있습니다.이건 내 또 다른 대답이야.

관련 정보