grep에서 수직 막대를 작동시키는 방법 |

grep에서 수직 막대를 작동시키는 방법 |

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

grep '(565172|565173|565175)' /var/log/cups/error_log

3개의 값이 모두 파일에 여러 번 나타나더라도 출력이 생성되지 않습니다.

막대를 탈출하려고 시도했는데 상황이 다소 개선되었습니다. 중간 값은 감지되지만 첫 번째 또는 마지막 값은 감지되지 않습니다.

grep '(565172\|565173\|565175)' /var/log/cups/error_log

또한 두 번 탈출을 시도했지만 결과가 반환되지 않았습니다.

grep '(565172\\|565173\\|565175)' /var/log/cups/error_log

내가 뭘 잘못했나요? 감사해요.

답변1

당신이 직면한 것은 기본 정규식과 확장 정규식의 차이점입니다. grep 매뉴얼 페이지에서:

기본 정규식에서는 메타 문자 ?, +, {, |, ( 및 )가 특별한 의미를 잃습니다. 대신 백슬래시 버전 \?, +, {, \|, ( 및 )가 사용됩니다.

따라서 다음 중 하나를 수행할 수 있습니다.

 grep '\(565172\|565173\|565175\)' /var/log/cups/error_log

또는

grep -E '(565172|565173|565175)' /var/log/cups/error_log

-E 플래그는 "확장된" 정규식을 활성화합니다. GNU grep은 Perl 호환 정규식도 지원합니다.

답변2

사용하려는 구문은 확장 정규식에 속하므로 대답은 매우 간단합니다. egrep해당 -E플래그를 사용하거나 포함하십시오.

관련 정보