用于搜索属性和存储值以及文件名的shell脚本

时间:2009-06-09 02:06:41

标签: shell

寻找一个shell脚本,在当前目录的所有文件中搜索属性(字符串),并将属性值与文件名一起存储。

例如File1.txt

abc xyz =“pqr”

FILE2.TXT

abc xyz =“klm”

这里File1和File2包含所需的字符串“abc xyz”,其值为“pqr”和“klm”。 我想要的结果是这样的: FILE1.TXT:PQR FILE2.TXT:KLM

2 个答案:

答案 0 :(得分:1)

嗯,这取决于你如何定义'shell脚本'。以下是3个单线解决方案:

  • 使用grep / sed:

    egrep -o“abc xyz =”。*“'* | sed -e's / abc xyz =”(。*)“/ \ 1 /'

  • 使用awk:

    awk'/ abc xyz =“(。)”/ {print FILENAME“:”gensub(“abc xyz = \”(。)\“”,“\ 1”,1) }'*

  • 使用perl one-liner:

    perl -ne'if(s / abc xyz =“(。*)”/ $ ARGV:$ 1 /){print}'*

我个人会选择最后一个。

答案 1 :(得分:0)

请不要为此使用bash脚本。

代码有很小的改进空间,
但在20行中,该死的东西能完成这项工作。

注意:代码假定“abc xyz”位于该行的开头。

#!/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,

感谢David BeazleyA.M. KuchlingMark Pilgrim分享他们丰富的知识。
如果没有你们带路的话,我不可能做到这样的事情。