다음과 같은 데이터가 있습니다. "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
줄의 끝 부분과 다른 문자가 뒤에 오는 문자를 검색합니다.