grep은 검색 할 수있는 패턴과 일치하는 단어 만 표시 할 수 있습니까?
검색 배열과 일치하는 파일에서 grep 출력 "단어"를 만드는 방법이 있습니까?
여러 파일에서 "th"와 같은 모든 인스턴스를 사용할 수 있습니다.
grep "th" *
그러나 출력은 다음과 가변적이다.
일부 텍스트 파일은 : 고양이에 매트 매트 일부-다른 텍스트 파일 : 빠른 갈색 여우 아직 다른 텍스트 파일 : 나는 희망 이 그것을 설명 철저히
동일한 검색을 사용하여 출력하려는 내용은 다음과 가변적입니다.
the
the
the
this
thoroughly
grep을 사용하여 가능합니까? 아니면 다른 도구 조합을 사용하십니까?
grep -o 시도
grep -oh "\w*th\w*" *
편집 : Phil의 의견에서 일치
에서 워드 프로세서 :
-h, --no-filename
Suppress the prefixing of file names on output. This is the default
when there is only one file (or only standard input) to search.
-o, --only-matching
Print only the matched (non-empty) parts of a matching line,
with each such part on a separate output line.
교차 배포 안전 답변 (Windows minGW 포함?)
grep -h "[[:alpha:]]*th[[:alpha:]]*" 'filename' | tr ' ' '\n' | grep -h "[[:alpha:]]*th[[:alpha:]]*"
-o 옵션을 포함하지 않는 이전 버전의 grep (2.4.2와 같은)를 사용하는 경우. 위를 사용하십시오. 라이선스 더 간단한 버전을 사용하여 아래 버전을 유지하십시오.
Linux 교차 배포 안전한 답변
grep -oh "[[:alpha:]]*th[[:alpha:]]*" 'filename'
-oh
출력 을 요약 하면 정규식이 파일 내용 (파일 이름이 아님)과 일치하는 결과를 출력합니다. 정규식이 vim / etc에서 작동하는 방식과 작동합니다. 검색 할 단어 또는 정규식은 다음과 가변합니다. 당신! Perl 구문이 아닌 POSIX를 사용하는 한 (아래 참조)
-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 : 지금부터 대부분의 플랫폼이 있습니다.)
@AdamRosenfield 답변의 "-o"해결 방법에 대한 신용
공백을 개행 문자로 번역 한 다음 grep을 사용할 수 있습니다. 예 :
cat * | tr ' ' '\n' | grep th
다만 awk
, 도구 필요없이 조합입니다.
# awk '{for(i=1;i<=NF;i++){if($i~/^th/){print $i}}}' file
the
the
the
this
thoroughly
생각보다 간단합니다. 이 시도:
egrep -wo 'th.[a-z]*' filename.txt #### (Case Sensitive)
egrep -iwo 'th.[a-z]*' filename.txt ### (Case Insensitive)
어디,
egrep: Grep will work with extended regular expression.
w : Matches only word/words instead of substring.
o : Display only matched pattern instead of whole line.
i : If u want to ignore case sensitivity.
매칭 및 펄 전용 grep 명령
grep -o -P 'th.*? ' filename
나는 awk의 구문을 기억하기 어려운 것에 만족하지 못했지만이를 위해 하나의 유틸리티를 사용하는 아이디어가 마음에 들었습니다.
ack (또는 Ubuntu를 사용하는 경우 ack-grep)이이 작업을 쉽게 수행 할 수있는 것 같습니다.
# ack-grep -ho "\bth.*?\b" *
the
the
the
this
thoroughly
-h 플래그를 생략하면 다음을 얻을 수 있습니다.
# ack-grep -o "\bth.*?\b" *
some-other-text-file
1:the
some-text-file
1:the
the
yet-another-text-file
1:this
thoroughly
보너스로 --output
플래그를 사용하여 내가 찾은 가장 쉬운 구문으로 더 복잡한 검색을 수행 할 수 있습니다 .
# echo "bug: 1, id: 5, time: 12/27/2010" > test-file
# ack-grep -ho "bug: (\d*), id: (\d*), time: (.*)" --output '$1, $2, $3' test-file
1, 5, 12/27/2010
cat *-text-file | grep -Eio "th[a-z]+"
"icon-"으로 시작하는 모든 단어를 검색하려면 다음 명령이 완벽하게 작동합니다. 여기서는 grep과 비슷하지만 더 나은 옵션과 멋진 형식을 가진 Ack를 사용 하고 있습니다.
ack -oh --type=html "\w*icon-\w*" | sort | uniq
pcregrep 을 시도 할 수도 있습니다 . grep-w
옵션 도 있지만 경우에 따라 예상대로 작동하지 않습니다.
에서 위키 백과 :
cat fruitlist.txt
apple
apples
pineapple
apple-
apple-fruit
fruit-apple
grep -w apple fruitlist.txt
apple
apple-
apple-fruit
fruit-apple
비슷한 문제가 발생하여 grep / pattern regex 및 "일치 패턴 발견"을 출력으로 찾습니다.
결국 나는 옵션 -o와 함께 egrep (grep -e 또는 -G에 대한 동일한 정규식이 egrep의 동일한 결과를 제공하지 않음)를 사용했습니다.
그래서 (나는 정규식 마스터가 아닙니다)와 비슷한 것일 수 있다고 생각합니다.
egrep -o "the*|this{1}|thoroughly{1}" filename
다음과 같이 grep 출력을 Perl로 파이프 할 수 있습니다.
grep "th" * | perl -n -e'while(/(\w*th\w*)/g) {print "$1\n"}'
$ grep -w
grep man 페이지에서 발췌 :
-w : 전체 단어를 구성하는 일치 항목을 포함하는 행만 선택하십시오. 테스트는 일치하는 하위 문자열이 줄의 시작 부분에 있거나 단어가 아닌 구성 문자가 앞에 와야한다는 것입니다.
ripgrep
다음은 사용하는 예입니다 ripgrep
.
rg -o "(\w+)?th(\w+)?"
일치하는 모든 단어와 일치 th
합니다.
참고 URL : https://stackoverflow.com/questions/1546711/can-grep-show-only-words-that-match-search-pattern
'ProgramingTip' 카테고리의 다른 글
.then () 체인에서 이전 약속 결과에 어떻게 액세스 할 수 있습니까? (0) | 2020.10.03 |
---|---|
간단한 DI 코드가 아닌 IoC 컨테이너가 필요한 이유는 무엇입니까? (0) | 2020.10.03 |
MySQL 쿼리 GROUP BY 일 / 월 / 년 (0) | 2020.10.03 |
SVN으로 디렉토리를 선택하고 있습니까? (0) | 2020.09.29 |
데이터 ID 속성을 얻는 방법은 무엇입니까? (0) | 2020.09.29 |