두 단어가 모두 포함된 문자열이 아닙니다. 두 단어가 모두 포함된 파일을 어떻게 찾아내죠?
만약. 여기서 파일'이라는 의미'가 파일에 이름이 아니라면. 각 파일을 모두 읽어봐야 할거 같습니다.
결론은. - 파일 목록 얻기 - 파일 목록을 비교해서 검색하기
보자기. 박쥐를 검색 홍금보는 황금박쥐를 보자기로 덮어씌웠다.
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 & Templatehttp://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
-P 옵션을 지원하여 펄 정규식을 쓸 수 있는 grep 이라면
$ grep -Pl '(?s)^(?=.*PATTERN1)(?=.*PATTERN2)(?=.*PATTERN3)' *
Perl 로
$ perl -0777 -n -E '/PATTERN1/ && /PATTERN2/ && /PATTERN3/ && say $ARGV' *
좋은 하루 되세요!
좀 비효율적이어도 괜찮고 파일 갯수가 아주 많지 않다면 그냥 이러면 될 것 같은데요:
grep -l (pattern1) (files...) | xargs grep -l (pattern2)
grep -e "pattern1.*pattern2" -e "pattern2.*pattern1"
추천해봅니다.
소곤소곤
이렇게 하면 pattern1이랑 pattern2가 서로 다른 줄에 있으면 안 나오는 듯합니다.
1번방법
첫째, 1번방법과 2번방법은 약간 다릅니다. (서로다른줄 문제는 일단 빼고) pattern1 이 ABCDE 이고, pattern2가 CDEFG 인 경우 입력이 ABCDEFG 라면 1번으로는 잡히고, 2번은 안 잡힙니다.
둘째, 2번 방법에서 서로 다른 줄에 있는 경우를 찾으려면
grep -lPz "(?s)(pattern1.*pattern2|pattern2.*pattern1)"
셋째, 비효율적인 방법이라고 겸손하게 말씀하셨지만, 1번 방법보다 나은 방법은 생각하기 어렵네요.(결과물의 차이는 빼고)
모양이 좀 흉하지만 awk로 하실수도..
$ awk 'FNR==1{a=b=0} /PATTERN1/{a=1} /PATTERN2/{b=1} a&&b{print FILENAME; nextfile}' *
파일 첫 줄에서 flag 초기화, 패턴 만나면 각 flag set, 모든 flag 다 켜진 순간 파일명 출력하고 다음파일로 점프 식입니다.
텍스트 포맷에 대한 자세한 정보
<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]
몇가지 방법이 있을겁니다.
만약. 여기서 파일'이라는 의미'가 파일에 이름이 아니라면. 각 파일을 모두 읽어봐야 할거 같습니다.
결론은.
- 파일 목록 얻기
- 파일 목록을 비교해서 검색하기
보자기. 박쥐를 검색
홍금보는 황금박쥐를 보자기로 덮어씌웠다.
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
-P 옵션을 지원하여 펄 정규식을 쓸 수 있는
-P 옵션을 지원하여 펄 정규식을 쓸 수 있는 grep 이라면
Perl 로
좋은 하루 되세요!
...
좀 비효율적이어도 괜찮고 파일 갯수가 아주 많지 않다면 그냥 이러면 될 것 같은데요:
grep -l (pattern1) (files...) | xargs grep -l (pattern2)
grep -e "pattern1.*pattern2"
추천해봅니다.
소곤소곤
서로 다른 줄에 있으면
이렇게 하면 pattern1이랑 pattern2가 서로 다른 줄에 있으면 안 나오는 듯합니다.
1번방법grep -l (pattern1)
1번방법
2번방법
첫째,
1번방법과 2번방법은 약간 다릅니다. (서로다른줄 문제는 일단 빼고)
pattern1 이 ABCDE 이고, pattern2가 CDEFG 인 경우
입력이 ABCDEFG 라면 1번으로는 잡히고, 2번은 안 잡힙니다.
둘째,
2번 방법에서 서로 다른 줄에 있는 경우를 찾으려면
로 할 수 있습니다.
그런데 과연 1번방법보다 효율적일지는...
셋째,
비효율적인 방법이라고 겸손하게 말씀하셨지만,
1번 방법보다 나은 방법은 생각하기 어렵네요.(결과물의 차이는 빼고)
모양이 좀 흉하지만 awk로 하실수도.. $ awk
모양이 좀 흉하지만 awk로 하실수도..
파일 첫 줄에서 flag 초기화, 패턴 만나면 각 flag set,
모든 flag 다 켜진 순간 파일명 출력하고 다음파일로 점프 식입니다.
댓글 달기