두 단어가 모두 포함된 파일을 어떻게 찾아내죠?

k1d0bus3의 이미지

두 단어가 모두 포함된 문자열이 아닙니다.
두 단어가 모두 포함된 파일을 어떻게 찾아내죠?

shint의 이미지

만약. 여기서 파일'이라는 의미'가 파일에 이름이 아니라면. 각 파일을 모두 읽어봐야 할거 같습니다.

결론은.
- 파일 목록 얻기
- 파일 목록을 비교해서 검색하기

보자기. 박쥐를 검색
홍금보는 황금박쥐를 보자기로 덮어씌웠다.

DB로 하시면 편할겁니다. SQLite 등에 작은 DB도 있습니다.
느릴 수 있지만. 문자열 비교로 하셔도 되구요. strcmp() 나 byte로 비교하셔도 되구요.
숙달되셨다면. STL 을 사용하셔도 되구요.

PHP나 Python. Flash. Perl. VBScript. 등을 사용하셔도 되구요.

1. 파일 목록 얻기
- Everything 이라는 고속 파일 검색 프로그램이 있습니다.
인덱스를 만드는지. 1초 안에 검색이 가능합니다.
SDK 도 제공되고 있습니다.

- C에 함수로 파일리스트를 검색하셔도 됩니다.

- TREE 와 같은 도스 명령어를 사용하기도 합니다.

- 윈도우에서 인덱스 검색을 제공하고 있습니다.

윈도우 배치파일에서 awk와 비슷한 명령어가 있을까요?
http://kldp.org/node/154103

도스(DOS) 배치 파일을 쉘 스크립트로 변환 Windows TIP! /   Windows
http://darkstorm001.blog.me/40016680808

2. 얻어진 내용을 메모리. DB. 등에 저장합니다.

3. 목록에서 두 단어를 검색
- DB 에서 SELECT 로 검색
- C로 구현
- C에서 stl map으로 구현

DIR 도스 명령어로도 검색이 가능합니다.
dir *보자기*.*
dir *박쥐*.*

dir /s *.dll 이라고 하면. 하위 경로에 모든 파일 이름을 검색하게 됩니다.

--------------------------------------------------------------------------
test 재귀호출을 사용하지 않고. 모든 파일 폴더 경로 리스트박스에 보여주기 <--- 이것을 참고하셔도 좋습니다.
http://cfile231.uf.daum.net/attach/23198D3D5781CB4806C7F4

STL MAP 예제는 메모리를 많이 잡아먹는 오류가 있는거 같다.
http://www.devpia.com/Maeul/Contents/Detail.aspx?BoardID=51&MAEULNo=20&no=8826&ref=8826

Using the STL map & Template
http://www.codeproject.com/Articles/1717/Using-the-maps

test STL map 사용방법
http://www.cplusplus.com/reference/map/map/

http://cfile237.uf.daum.net/attach/251BF346562C57900458F0

unordered_map ★hash_map 대신 좋다고 한다. ★STL map 정리
http://kldp.org/node/153949

STL multimap 과 map 을 순서대로 출력하는 방법 (정렬)? multimap> ★★★★★ | 한메일

클래스 상속, 객체 생성
http://www.devpia.com/Maeul/Contents/Detail.aspx?BoardID=50&MAEULNO=20&no=960552&ref=960552&page=1

http://cfile217.uf.daum.net/attach/2273CE3F564484A61D5128

STL deque 를 사용한 추가. 삭제. 보는 프로그램 예제소스 (DevC++) - dq.erase(dq.begin()+i);

map 으로 만들어도 될거 같고.
algorism 을 추가해서 정렬해도 될거 같고...
http://kldp.org/node/153450#comment-612878

http://cfile236.uf.daum.net/attach/2676FB49560C2EBD1367D6

----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.

매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.

각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com

raymundo의 이미지

-P 옵션을 지원하여 펄 정규식을 쓸 수 있는 grep 이라면

$ grep -Pl '(?s)^(?=.*PATTERN1)(?=.*PATTERN2)(?=.*PATTERN3)' *

Perl 로

$ perl -0777 -n -E '/PATTERN1/ && /PATTERN2/ && /PATTERN3/ && say $ARGV' *

좋은 하루 되세요!

jick의 이미지

좀 비효율적이어도 괜찮고 파일 갯수가 아주 많지 않다면 그냥 이러면 될 것 같은데요:

grep -l (pattern1) (files...) | xargs grep -l (pattern2)

백연구원의 이미지

grep -e "pattern1.*pattern2" -e "pattern2.*pattern1"

추천해봅니다.


소곤소곤

Prentice의 이미지

이렇게 하면 pattern1이랑 pattern2가 서로 다른 줄에 있으면 안 나오는 듯합니다.

qiiiiiiiip의 이미지

1번방법

grep -l (pattern1) (files...) | xargs grep -l (pattern2)

2번방법
grep -e "pattern1.*pattern2" -e "pattern2.*pattern1"

첫째,
1번방법과 2번방법은 약간 다릅니다. (서로다른줄 문제는 일단 빼고)
pattern1 이 ABCDE 이고, pattern2가 CDEFG 인 경우
입력이 ABCDEFG 라면 1번으로는 잡히고, 2번은 안 잡힙니다.

둘째,
2번 방법에서 서로 다른 줄에 있는 경우를 찾으려면

grep -lPz "(?s)(pattern1.*pattern2|pattern2.*pattern1)"

로 할 수 있습니다.
그런데 과연 1번방법보다 효율적일지는...

셋째,
비효율적인 방법이라고 겸손하게 말씀하셨지만,
1번 방법보다 나은 방법은 생각하기 어렵네요.(결과물의 차이는 빼고)

chanik의 이미지

모양이 좀 흉하지만 awk로 하실수도..

$ awk 'FNR==1{a=b=0} /PATTERN1/{a=1} /PATTERN2/{b=1} a&&b{print FILENAME; nextfile}' *

파일 첫 줄에서 flag 초기화, 패턴 만나면 각 flag set,
모든 flag 다 켜진 순간 파일명 출력하고 다음파일로 점프 식입니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.