如何在各个jar文件中的直接.class文件或.class文件中查找特定的字符串文本,这些文件保存在几个子目录中

时间:2013-12-05 15:40:59

标签: java shell unix awk

我对java代码中使用System.out.println的担忧,所有java文件都不适用于我。我们在制作中只有.class。有数千个文件有System.out.println条目。 为了清理这个字符串。如何查找具有此字符串的所有罪魁祸首类文件。 我知道javap,它反汇编.class文件。但不知道javap是否可以用于我的目的。 任何Unix命令或java程序或awk脚本或已知的UI工具都适合我。 我只是想摆脱System.out.println

我在cygwin中使用了以下命令,但没有成功!

find . -iname '*.class' -printf "%p | grep -q 'System.out.println' && echo %p\n" | sh

1 个答案:

答案 0 :(得分:2)

我正在使用Gnu grep版本2.10。

然后给出一个示例类文件,其中包含System.out.println我得到

bash$ grep 'System.out.println' sample.class
Binary file sample.class matches

因此,为了提取匹配的文件,您可以使用以下内容:

#! /bin/bash

shopt -s globstar nocaseglob
files=(**/*.class)

for (( i=0; i<${#files[@]}; i++ )) ; do
    file="${files[$i]}"
    res=$(grep 'System.out.println' $file)
    [[ $? == 0 ]] && awk '{print $3}' <<< "$res"
done