나는 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예더 이상 사용되지 않음