現在のディレクトリ内のすべてのファイルで属性(文字列)を検索し、ファイル名と共に属性値を格納するシェルスクリプトを探します。属性とストア値をファイル名と共に検索するシェルスクリプト
例えばFILE1.TXT
のABC XYZ = "PQR"
FILE2.TXTは
ABC xyzが=ここ
はFile1とFile2のが目的の文字列 "ABCのXYZ" を含む "KLM"値「pqr」および「klm」を有する。 FILE1.TXT: FILE2.TXT PQR:KLM
現在のディレクトリ内のすべてのファイルで属性(文字列)を検索し、ファイル名と共に属性値を格納するシェルスクリプトを探します。属性とストア値をファイル名と共に検索するシェルスクリプト
例えばFILE1.TXT
のABC XYZ = "PQR"
FILE2.TXTは
ABC xyzが=ここ
はFile1とFile2のが目的の文字列 "ABCのXYZ" を含む "KLM"値「pqr」および「klm」を有する。 FILE1.TXT: FILE2.TXT PQR:KLM
このためにはbashスクリプトを使用しないでください 私はこのような何かを発生します。
コードには少し改善の余地がありますが、
ですが、20行ではその仕事をしています。
注:このコードでは、行の先頭に「abc xyz」があることを前提としています。その膨大な知識を共有するためのDavid Beazley、A.M. Kuchling、およびMark 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,
感謝。
あなたの道を導く人がいなければ、このようなことはできませんでした。
これは、どのように 'シェルスクリプト'を定義するかによって異なります。
はgrep/sedの使い方::ここでは3一行のソリューションです。
egrepの-o "のABC XYZ =は" * "'* | sedの-eさん/ ABC XYZ ="(。 *) "/ \ 1/'
使用AWK:
AWK'/ABC XYZ = "()"/ {印刷FILENAME ":" gensub( "ABCのXYZ = \"( )\ ""、\ 1 "、1)} '*
使用Perlのワンライナー:
のperl -ne 'IF(S/ABC XYZ = "(*)。"/$ ARGV:$ 1 /){プリント} *
私が個人的に希望最後のものと一緒に行く。
@abbot:あなたの答えははるかに優れています。私の仕事では、スクリプトを再利用して拡張する傾向があります。 Pythonは理想的です。しかし、これは一回限りの仕事のようです。簡潔な1ライナーの功績。あなたが私の答えを削除すべきだと思ったら教えてください。 – bernie
削除する必要はありません。しかし、pythonのバージョンはもっとコンパクトにできます。http://gist.github.com/126323 – abbot
かなりの圧縮率があります!その宝石を共有してくれてありがとう。 – bernie