한 글자로 시작하고 두 글자를 포함하는 모든 단어를 찾으려면 정규식이 필요합니다.

한 글자로 시작하고 두 글자를 포함하는 모든 단어를 찾으려면 정규식이 필요합니다.

beach라는 단어를 찾아야 합니다. 이 단어가 b로 시작하고 ch를 포함하도록 지정하려면 어떻게 해야 합니까? 나는 grep '^s.*ch'를 사용해 보았지만 그것을 포함하는 줄을 인쇄했지만 나는 단지 단어를 원했습니다.

답변1

문제는 .*공백을 포함하여 모든 문자 시퀀스(개행 문자 생략 가능)를 일치시키는 것입니다.

따라서 단어를 구성하는 문자만 일치하도록 변경하려고 합니다. 이를 수행하는 정확한 방법은 사용하는 정규식의 구현과 다른 알파벳의 문자를 설명하려는지 여부에 따라 다릅니다. 합리적으로 이식 가능한 접근 방식은 다음을 사용하는 것입니다.[[:alpha:]]*

단어 시작 부분에서 일치하는 구문도 구현에 따라 다릅니다. grep의 경우 \<.

-o단어를 얻으려면 도움이 될 수 있는 두 가지 grep 옵션 이 있습니다 --color. 전자는 일치하는 항목만 출력하고 후자는 전체 줄을 출력하고 일치하는 항목을 강조 표시합니다.

그래서 당신은 원할 수도 있습니다

grep -o '\<b[[:alpha:]]*ch' filename

답변2

$ grep -o '\<b[a-z]*ch[a-z]*' file

b그러면 및 로 시작하는 모든 단어가 표시됩니다 ch. 둘 다 [a-z]*소문자와 일치합니다. \<b단어의 첫 글자인지 확인 합니다 .

옵션을 사용하면 전체 줄이 아닌 일치하는 문자열만 반환하게 됩니다 -o.grep

선택하다:

$ grep -o '\<b[[:lower:]]*ch[[:lower:]]*' file

당신의 패턴은 ^s.*ch무엇이든 일치합니다철사같은 줄에 있는 다른 위치 로 시작 s하고 포함합니다 .ch

관련 정보