2009-06-09 6 views
0

현재 디렉토리의 모든 파일에서 속성 (문자열)을 검색하고 파일 이름과 함께 속성 값을 저장하는 쉘 스크립트를 찾습니다.속성 및 저장 값을 파일 이름과 함께 검색하는 쉘 스크립트

등은 File2.txt

ABC의 XYZ = "PQR"

File2.txt는

ABC XYZ는 = 여기

을 File1하고있는 File2 원하는 문자열 "ABC의 XYZ를 '포함'KLM" "pqr"및 "klm"값을가집니다. 은 File2.txt : File2.txt PQR : KLM

답변

0

이를 위해 bash는 스크립트를 사용하지 마십시오 나는 이런 식으로 뭔가를 초래합니다.

코드가 약간 개선 될 여지가 많습니다.
하지만 20 줄에서 그 일을합니다.

참고 : 코드는 "abc xyz"가 줄의 시작 부분에 있다고 가정합니다. 자신의 방대한 지식을 공유하기위한 David Beazley, A.M. KuchlingMark Pilgrim

#!/usr/bin/python 

import os 
import re 

MYDIR = '/dir/you/want/to/search' 

def search_file(fn): 
    myregex = re.compile(r'abc xyz = \"([a-z]+)\"') 
    f = open(fn, 'r') 
    for line in f: 
     m = myregex.match(line) 
     if m: 
      yield m.group(1) 

for filename in os.listdir(MYDIR): 
    if os.path.isfile(os.path.join(MYDIR, filename)): 
     matches = search_file(os.path.join(MYDIR, filename)) 
     for match in matches: 
      print filename + ':' + match, 

감사합니다.
길을 선도하는 사람들 없이는 이런 식으로 할 수 없었습니다.

1

음, 이것은 '쉘 스크립트'를 어떻게 정의 하느냐에 달려 있습니다. 나오지도 그렙를/사용

  • : 여기에 3 한 줄 솔루션입니다

    egrep을 -o "ABC의 XYZ ="* " '* | 나오지도 -e'의/ABC XYZ ="(.. *) "/ \ 1/'

  • 사용 AWK :

    AWK'/ ABC XYZ ="() "/ {인쇄 FILENAME".. "gensub ("ABC의 XYZ = \ "() \ "", \ 1 ", 1)} '*

  • 사용 펄 한 줄 :

    펄 -ne '경우 (S/ABC XYZ = "(*)."/ $ ARGV : $ 1 /) {인쇄}'*

개인적 것 마지막으로 가라.

+0

@abbot : 답변이 훨씬 좋습니다. 내 작품에서는 스크립트를 재사용하고 확장하는 경향이 있습니다. 그래서 파이썬은 이상적입니다. 그러나 이것은 일회성 과제로 보인다. 간결한 단 하나 강선에 명성. 내 대답을 삭제해야한다고 생각한다면 알려주십시오. – bernie

+0

삭제할 필요가 없습니다. 그러나 파이썬 버전은 훨씬 더 컴팩트하게 만들어 질 수 있습니다. http://gist.github.com/126323 – abbot

+0

꽤 많은 압축 비율이 있습니다! 그 보석을 공유해 주셔서 감사합니다. – bernie