다음은 제가 시도한 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
플래그를 사용하거나 포함하십시오.