정규식 - 문자 쌍만 검색

정규식 - 문자 쌍만 검색

다음과 같은 데이터가 있습니다. "bb"만 포함된 행만 추출하려는 것입니다. "b"나 "bbb"가 아니라 그냥 "bb"입니다.

abb
abbb
aabbcc
aabab
abbbbc

이제 다음 명령 조합을 사용할 때:

cat file1 | grep "bb[^b]

내가 얻는 출력은 예제 파일의 모든 줄입니다.

abb
abbb
aabbcc
aabab
abbbbc

내가 원하는 기대치는 -:("bb"를 포함하는 행만)입니다.

abb
aabbcc

이를 달성할 수 있는 정규식은 무엇입니까?

아바부유효하지 않은. 다음을 포함하는 행만 찾고 있습니다.BB그리고 다른 모드는 없어요두번째. 줄에는 두 개의 연속된 내용만 포함됩니다.두번째그리고 다른 b 문자는 전혀 없습니다.

답변1

가장 직접적인 방법은 다음과 같습니다.

grep '^[^b]*bb[^b]*$' file1

그런데, grep이와 같은 명령이 파일 이름 인수를 받아들이는 것이 더 효율적입니다.

grep '^[^b]*bb[^b]*$' file1

또는

grep '^[^b]*bb[^b]*$' < file1

(후자는 파일 매개변수가 지원되지 않는 경우에도 작동합니다)

비교하다

cat file1 | grep '^[^b]*bb[^b]*$'

그리고 더 유연한 경향이 있습니다.

답변2

grep '\(^\|[^b]\)bb\([^b]\|$\)'

또는

grep -E '(^|[^b])bb([^b]|$)'

즉, bb줄의 시작 부분보다 앞에 있거나 다른 문자 b, 그리고 b줄의 끝 부분과 다른 문자가 뒤에 오는 문자를 검색합니다.

관련 정보