我有一个目录/usr/local/
,其中包含一些子目录:
/usr/local/service/servicename/er.jca
/usr/local/service/servicename1/er1.jca
...
我想搜索这些子目录中的所有 *.jca 文件,并以 PackageName/Procedure Name 格式对所有 jca 文件的 PackageName 和 procedure Name 的值进行 grep(筛选出),但前提是*.jca 文件有
className="oracle.tip.adapter.db.DBStoredProcedureInteractionSpec"
我期望的输出是列出 txt 文件中所有 PackageName/ProcedureName 的值。例如,给定这个 .jca 文件:
ex:
className="oracle.tip.adapter.db.DBStoredProcedureInteractionSpec">
<property name="SchemaName" value="APPS"/>
<property name="PackageName" value="XX"/>
<property name="ProcedureName" value="process"/>
输出应该是:
XX/process
我已经尝试过:
grep -rnw $directory -e *.jca
$directory=/usr/local
最佳答案
首先创建以下文件:
if grep className=\"oracle.tip.adapter.db.DBStoredProcedureInteractionSpec\" ${1} > /dev/null; then
x=`grep -e "\(\<property name=\"PackageName\" value=\"\)[^\"]\+" jca.jca | sed "s/.*\<property name=\"PackageName\" value=\"\(.*\)\"\/\>/\1/"`
y=`grep -e "\(\<property name=\"ProcedureName\" value=\"\)[^\"]\+" jca.jca | sed "s/.*\<property name=\"ProcedureName\" value=\"\(.*\)\"\/\>/\1/"`
echo ${x}/${y}
fi
调用该文件filter.sh
,然后chmod a+x filter.sh
。 filter.sh
将您想要的两个项目提取到 x
和 y
中,然后将它们回显到输出。毫无疑问,有一种更优雅的方法可以做到这一点,但它确实有效。请注意,您可以对各个文件运行 filter.sh
以验证其行为是否符合您的要求。创建 filter.sh
后,以下命令应该可以解决问题:
find ${directory} -name "*.jca" -exec ./filter.sh {} \;
这将查找目录 ${directory}
中与 glob 模式 *.jca
匹配的所有文件,然后运行 filter.sh
它。
关于python - 通过搜索unix中的所有目录来编译值列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32706276/