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