텍스트 파일에서 시작 b
하고 끝나며 또는를 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::]]*
수 있습니다..*
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"가 포함되어야 합니다.
- 일치가 성공하면 단어가 표시됩니다.