교차 배포 안전 답변 (Windows minGW 포함)
grep -h "[[:alpha:]]*th[[:alpha:]]*" 'filename' | tr ' ' '\n' | grep -h "[[:alpha:]]*th[[:alpha:]]*"
-o 옵션을 포함하지 않는 이전 버전의 grep (예 : 2.4.2)을 사용하는 경우 위를 사용하십시오. 그렇지 않으면 더 간단한 버전을 유지하십시오.
리눅스 교차 배포 안전 답변
grep -oh "[[:alpha:]]*th[[:alpha:]]*" 'filename'
-oh
출력 을 요약 하면 정규 표현식이 vim / etc에서 작동하는 방식과 마찬가지로 파일 이름이 아닌 파일 내용과 일치하는 정규 표현식이 검색됩니다. 당신! 펄 구문이 아닌 POSIX를 유지하는 한 (아래 참조)
grep 매뉴얼에서 더보기
-o Print each match, but only the match, not the entire line.
-h Never print filename headers (i.e. filenames) with output lines.
-w The expression is searched for as a word (as if surrounded by
`[[:<:]]' and `[[:>:]]';
원래 답변이 모든 사람에게 적용되지 않는 이유
\w
확장 된 "perl"구문으로 사용법은 플랫폼마다 다릅니다. 따라서 POSIX 문자 클래스와 함께 작동하도록 제한되는 grep 설치 [[:alpha:]]
는 펄에 해당하지 않습니다 \w
. 자세한 내용은 정규식 Wikipedia 페이지를 참조하십시오.
궁극적으로 위의 POSIX 답변은 grep 플랫폼 (원본)에 관계없이 훨씬 안정적입니다.
-o 옵션없이 grep을 지원하는 경우 첫 번째 grep은 관련 행을 출력하고 tr은 공백을 새 행으로 분할하고 최종 grep은 해당 행에 대해서만 필터링합니다.
(PS : 지금까지 대부분의 플랫폼을 알고 있으며 \ w ...에 대해 패치되었을 것입니다.
@AdamRosenfield 답변의 "-o"해결 방법에 대한 크레딧