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

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

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

위와 같은 사양의 단어가 표시된 터미널에 명령어를 입력해야 합니다.

나는 다음을 사용했지만 한 단어에서 끝나지 않고 공백을 포함합니다.

~$  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::]]*수 있습니다..*

grep다음과 같이 사용됩니다

grep OPTIONS 'EXPRESSION' INPUT-FILES

EXPRESSION표준 출력(이 경우 터미널)과 일치하는 라인을 출력합니다 .

이 경우 표현식이 단어(단어가 아닌 문자로 둘러싸인 문자열)와 일치하고 일치하는 데이터(전체 행이 아님)만 반환하도록 하는 -w및 옵션을 사용할 수 있습니다 .-o

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

하고 싶다고 말씀하셨는데요가장 밝은 부분일치하는 단어. 이것은 GNU가 할 수 있는 일입니다 grep. 각 경기의 전체 라인을 얻기 위해 여기에 옵션 을 삭제하겠습니다 -o. 그렇지 않으면 이전과 동일한 결과를 얻게 되지만 강조 표시되므로 지루할 것입니다.

$ grep --color -w 'b[[:alnum:]]*[ig][[:alnum:]]*o' 단어
바이오jdjjf
ㅋㅋㅋ비고

보시다시피 이는 일치 항목이 포함된 줄의 일치 항목만 표시합니다. 일치 항목이 강조 표시된 전체 입력(일치 항목이 없는 줄 포함)을 보려면 옵션을 삭제 -w하고 다음을 수행해야 합니다.

$ grep --color -E '\bb[[:alnum:]]*[ig][[:alnum:]]*o\b|$' 단어
부 디제잉
바이오jdjjf
ㅋㅋㅋ비고
으아아

확장 정규식 -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"가 포함되어야 합니다.
  • 일치가 성공하면 단어가 표시됩니다.

관련 정보