or 로 시작 b
하고 끝나며 or를 포함하는 단어를 텍스트 파일에서 검색합니다 .o
i
g
위의 사양에 해당하는 단어가 표시되는 터미널에 명령을 입력해야 합니다.
다음을 사용했지만 두 개 이상의 단어가 있고 공백이 포함되어 있습니다.
~$ egrep -n '\bb.*(i|g).*o\b'
저는 Linux Ubuntu를 사용하고 있는데 이 명령문을 어떻게 실행해야 할지 모르겠습니다. 몇 가지 지침을 시도했지만 모두 실패했습니다. 이 작업을 수행하는 데 어려움을 겪고 있으므로 정규식 문의 압축을 풀 수 있도록 도와줄 수 있는 사람이 있나요?
예를 들어, 텍스트 파일에 다음과 같은 임의의 단어가 있다고 가정해 보겠습니다.
boo djhg
bio jdjjf
dgdhd bgo
ghhh
그런 다음 "boo", "bio" 및 "bgo"라는 단어를 강조 표시해야 합니다.
답변1
찾고 있는 명령은 grep
이고 원하는 정규식은 입니다 b[[:alnum:]]*[ig][[:alnum:]]*o
.
[[:alnum:]]
단일 영숫자 문자와 일치합니다.*
이전 표현식의 모든 숫자(0 포함)와 일치합니다.[ig]
단일i
또는 와 일치합니다g
.- 이 특정 정규 표현식의 다른 모든 문자(및)는
b
자체적으로 일치합니다.o
[[:alnum::]]*
공백이 포함된 단어가 일치 하지 않도록 하려면 not을 사용하세요 .*
.
grep
사용법은 다음과 같습니다
grep OPTIONS 'EXPRESSION' INPUT-FILES
EXPRESSION
표준 출력(이 경우 터미널)과 일치하는 행을 출력합니다 .
이 경우 표현식이 단어(단어가 아닌 문자로 둘러싸인 문자열)와 일치하도록 강제하고 전체 줄 대신 일치하는 데이터만 반환하는 -w
and 옵션을 사용해야 합니다 .-o
$ grep -w -o 'b[[:alnum:]]*[ig][[:alnum:]]*o' words
bio
bgo
원한다고 말씀하셨는데요강조하다일치하는 단어. 이것이 grep
GNU가 할 수 있는 일입니다. 여기서는 각 일치 항목에 대해 전체 행을 가져오는 옵션을 포기 했습니다 -o
. 그렇지 않으면 이전과 동일한 결과를 얻을 수 있지만 강조 표시가 포함되어 있어 지루할 것입니다.
$ grep --color -w 'b[[:alnum:]]*[ig][[:alnum:]]*o' 단어 생물학젭젭 ㅋㅋㅋ바고
보시다시피 이는 일치 항목이 포함된 줄의 일치 항목만 표시합니다. 전체 입력(일치하는 줄이 없더라도)을 보고 일치하는 항목을 강조 표시하려면 옵션을 제거 -w
하고 다음을 수행해야 합니다.
$ grep --color -E '\bb[[:alnum:]]*[ig][[:alnum:]]*o\b|$' 단어 쉿 생물학젭젭 ㅋㅋㅋ바고 잘
확장 정규 표현식이기 -E
때문에 이 옵션을 추가해야 합니다 . 모든 단어 경계에서 일치 |
합니다 .\b
답변2
나는 이것을 사용할 것입니다 grep
:
egrep -i "^b.*(i|g)+.*o$" /usr/share/dict/words
^b
"ㄴ"으로 시작.*
언제든지 무엇이든(i|g)*
"i" 또는 "g"를 한 번 이상o$
"오"로 끝나요
답변3
set -f; for w in `cat /usr/share/dict/words`; do
case $w in b*[ig]*o ) echo "$w" ;; esac
done
# you could as well say: $(< /usr/share/dict/words) in place of the backquoted cat.
# if your version of bash supports it.
단어 파일을 단어로 분할한 $w
다음 와일드카드로 확인합니다.
- 와일드카드 패턴은 b*[ig]*o이며 다음과 같이 해석될 수 있습니다.
- $w는 문자 "b"로 시작해야 합니다.
- $w는 문자 "o"로 끝나야 합니다.
- $w는 일치하려면 중간 "i" 또는 "g"를 포함해야 합니다.
- 일치가 성공적으로 이루어지면 단어가 표시됩니다.