寻找一个shell脚本,在当前目录的所有文件中搜索属性(字符串),并将属性值与文件名一起存储。
例如File1.txt
abc xyz =“pqr”
FILE2.TXT
abc xyz =“klm”
这里File1和File2包含所需的字符串“abc xyz”,其值为“pqr”和“klm”。 我想要的结果是这样的: FILE1.TXT:PQR FILE2.TXT:KLM
答案 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 Beazley,A.M. Kuchling和Mark Pilgrim分享他们丰富的知识。
如果没有你们带路的话,我不可能做到这样的事情。