사전 파일에서 특정 특성을 가진 단어 찾기

사전 파일에서 특정 특성을 가진 단어 찾기

or 로 시작 b하고 끝나며 or를 포함하는 단어를 텍스트 파일에서 검색합니다 .oig

위의 사양에 해당하는 단어가 표시되는 터미널에 명령을 입력해야 합니다.

다음을 사용했지만 두 개 이상의 단어가 있고 공백이 포함되어 있습니다.

~$  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표준 출력(이 경우 터미널)과 일치하는 행을 출력합니다 .

이 경우 표현식이 단어(단어가 아닌 문자로 둘러싸인 문자열)와 일치하도록 강제하고 전체 줄 대신 일치하는 데이터만 반환하는 -wand 옵션을 사용해야 합니다 .-o

$ grep -w -o 'b[[:alnum:]]*[ig][[:alnum:]]*o' words
bio
bgo

원한다고 말씀하셨는데요강조하다일치하는 단어. 이것이 grepGNU가 할 수 있는 일입니다. 여기서는 각 일치 항목에 대해 전체 행을 가져오는 옵션을 포기 했습니다 -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"를 포함해야 합니다.
  • 일치가 성공적으로 이루어지면 단어가 표시됩니다.

관련 정보