Grep 'OR' 정규식 문제

Grep 'OR' 정규식 문제

나는 grep과 정규 표현식을 사용하여 파일에서 가능한 문자열 2개 중 1개와 일치하는 행을 찾으려고 합니다. 이것은 내 grep입니다.

$ grep "^ID.*(ETS|FBS)" my_file.txt

위의 grep은 결과를 반환하지 않습니다. 그러나 다음 중 하나를 수행하는 경우:

$ grep "^ID.*ETS" my_file.txt  

또는

$ grep "^ID.*FBS" my_file.txt  

나는 특정 라인과 일치합니다. 내 OR 정규식이 일치하지 않는 이유는 무엇입니까? 당신의 도움에 미리 감사드립니다!

답변1

일반 정규 표현식, 문자 (및 이스케이프를 |사용 하세요. )그래서 당신은 사용해야합니다

$ grep "^ID.*\(ETS\|FBS\)" my_file.txt

사용할 때 이스케이프가 필요하지 않습니다.확장 정규식( -E) 옵션. man grep"" 섹션을 참조하세요 Basic vs Extended Regular Expressions.

답변2

|여러 분기( as )를 사용하려는 경우 or호환성을 높이기 위해 "최신 RE"를 사용하겠다고 명시적으로 말하는 것이 좋습니다. 오히려.

이렇게 하려면 다음을 사용하세요.grep -E:

grep -E "^ID.*(ETS|FBS)" my_file.txt

RE, ERE 및 전체 "최신" ER 스토리에 대해 자세히 알아보려면 을 참조하세요 man 7 regex.

egrep또는 대신 사용할 수 있지만 grep다음에서 읽을 수 있습니다 man grep.

egrep은 grep -E와 동일합니다. fgrep은 grep -F와 동일합니다.

(...)

다음으로 직접 전화하세요.에그레프또는fgrep더 이상 사용되지 않음

관련 정보