저는 현재 다음과 같은 특성을 가진 단어를 검색해야 하는 Unix 과정에서 문제에 직면해 있습니다. 이전에 했던 것보다 훨씬 더 복잡한 명령을 작성하는 데 도움을 줄 수 있는 사람이 있는지 궁금합니다. 영어 단어의 특징은 다음과 같습니다.
반드시...
- 정확히 5자 길이
- 대문자 또는 소문자 모음(a, e, i, o, u 또는 y)으로 시작합니다.
- 중간에 소문자 "t"가 있습니다.
- 소문자 's'로 끝남
- 나머지 문자는 영어 단어(예: 대문자, 소문자, 하이픈, 숫자 등)에 나타나는 모든 문자일 수 있습니다.
지금까지 나는 이와 같은 것을 가지고 있습니다.
[aeiouy].t.s
괄호 등. 이 모든 것은 grep과 관련이 있으며 /usr/share/dict/words
명령이 읽는 내용을 찾는 데 사용됩니다. 어떤 매개변수를 사용해야 하는지 알아야 합니다. 정말 혼란스럽습니다.
내가 발견한 주요 문제는 첫 번째 문자가 대문자인지 소문자인지 확인하고 나머지 문자는 대문자 또는 소문자로 교환할 수 있는지 확인하는 것입니다.
답변1
/usr/dict/words
한 줄에 한 단어씩.
당신이 놓치고 있는 가장 중요한 것은앵커 포인트단어의 시작 및/또는 끝을 일치시킵니다. 단어는 한 줄에 하나씩 있으므로 문자열(줄)의 시작과 끝을 일치시키기 위해 ^
and 를 사용할 수 있습니다.$
grep '^[AEIOUYaeiouy].t.s$' /usr/dict/words
많은 버전의 정규식 도구에는 단어 경계를 허용하는 확장 기능이 있습니다.
grep '\<[AEIOUYaeiouy].t.s\>' /usr/dict/words
답변2
grep "^[aeiouAEIOU].t.s\b" filename