python - 通过搜索unix中的所有目录来编译值列表

标签 python shell awk sed grep

我有一个目录/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.shfilter.sh 将您想要的两个项目提取到 xy 中,然后将它们回显到输出。毫无疑问,有一种更优雅的方法可以做到这一点,但它确实有效。请注意,您可以对各个文件运行 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/

相关文章:

python - 如何在 python 中用曲率拼接/弯曲/弯曲图像?

regex - 查找名称匹配模式的目录并移动它们

hadoop - awk命令组合多个参数

regex - sed/awk : replace megabytes with bytes (insert zeros)

python - 为什么 collections.Counter 将 numpy.nan 视为平等的?

python - 为什么我不能使用 exec 从另一个函数调用一个函数

linux - 从具有一些隐藏目录的目录创建 iso

python - 在 Linux 中如何允许 Python 脚本访问 protected 目录中的 mkdir 而无需 su 访问?

linux - 需要 grep/awk/gawk 返回整个部分,尽管有断线

python - 加速大都会--Python中的Hastings