내 첫 이니셜이 반드시 연속적으로 나타나지 않는 모든 단어를 찾으려고 노력하고 있습니다.
내 첫 번째 이니셜은 단어로 시작되어야 합니다.
내 마지막 이니셜은 단어를 끝내야 합니다.
내 중간 이니셜은 단어 사이에 있어요
암호:
grep '^j.*x$' file
(j는 첫 번째 초성, t는 중간 단어, x는 단어의 끝)
답변1
글쎄, 당신은부터 시작할 것입니다
j.*t.*x
하지만 이 .*
비트는 일치합니다.아무것. 따라서 문자만 일치하도록 다음 부분을 제한하십시오.
j[[:alpha:]]*t[[:alpha:]]*x
이것은 [[:alpha:]]
POSIX 문자 클래스입니다.약와 동일합니다 [A-Za-z]
. 즉, 임의의 알파벳 문자입니다.
이것이 당신의 패턴입니다. 그런 다음 grep
완전한 단어만 반환하도록 정중하게 요청하세요. 옵션을 사용하여 이를 수행할 수 있습니다 -w
. 이렇게 하면 단어가 아닌 문자(예: 공백) 또는 줄의 시작이나 끝으로 구분된 각 줄의 하위 문자열로 일치 항목이 제한됩니다.
-i
대소문자를 구분하지 않고 일치하려면 추가하세요.
전체 라인이 아니라 실제로 패턴과 일치하는 각 라인의 비트만 원하는 경우 추가로 사용하십시오 -o
.
당신은 결국 얻을 것이다
grep -i -o -w 'j[[:alpha:]]*t[[:alpha:]]*x'
시험:
$ grep -i -o -w 'j[[:alpha:]]*t[[:alpha:]]*x' /usr/share/dict/words
janitrix