linux - Bash grep 命令查找同一个文件 5 次

标签 linux bash grep ubuntu-14.04

我正在构建一个小的 bash 脚本来运行在多个目录中找到的另一个 bash 脚本。这是代码:

cd /home/mainuser/CaseStudies/

grep -R -o --include="Auto.sh" [\w] | wc -l

当我只执行该部分时,它会在每个文件夹中找到相同的文件 5 次。所以我得到的不是 49 个结果,而是 245 个。我之前写过一个递归的 bash 脚本,我用它作为这个问题的模板:

grep -R -o --include=*.class [\w] | wc -l

这段代码一直运行完美,没有任何重复。我试过在有和没有“”的情况下运行第一个代码,我也试过 -r。我已经通读了 bash 文档,但我似乎无法找到一种方法来防止这种重复,甚至无法找到这种重复的原因。关于如何解决这个问题有什么想法吗?

作为一个单独但相关的问题,如果我可以在每个目录中启动 Auto.sh,以便将 Auto.sh 的输出转储到该目录中;而不必将 Auto.sh 放在每个文件夹中。这可能比我目前正在做的更有效率,而且它也可能会解决我当前的重复问题。

这是 Auto.sh 的代码:

#!/bin/bash          
index=1
cd /home/mainuser/CaseStudies/
grep -R -o --include=*.class [\w] | wc -l
grep -R -o --include=*.class [\w] |awk '{print $3}' > out.txt

while read LINE; do
    echo 'Path '$LINE > 'Outputs/ClassOut'$index'.txt'
    javap -c $LINE >> 'Outputs/ClassOut'$index'.txt'
    index=$((index+1))
done <out.txt

最好我想让它只转储当前正在查看的应用程序的 javap 输出。由于这些 .class 文件可能位于任意数量的子目录中,我不确定如何将它们全部转储到顶级文件夹中,而不在每个应用程序的顶级目录中执行修改后的 Auto.sh。

最佳答案

好的,所以要修复多个查找:

grep -R -o --include="Auto.sh" [\w] | wc -l

应该是:

grep -R -l --include=Auto.sh '\w' | wc -l

发生这种情况的原因是它在 Auto.sh 中寻找字母 w 的实例。在文件中出现了 5 次。

但是,不需要在每个目录中放置 Auto.sh 的整体修复是这样的:

MAIN_DIR=/home/mainuser/CaseStudies/

cd $MAIN_DIR

ls -d */ > DirectoryList.txt

while read LINE; do
    cd $LINE
    mkdir ProjectOutputs
    bash /home/mainuser/Auto.sh
    cd $MAIN_DIR
done <DirectoryList.txt

调用此 Auto.sh 代码:

index=1

grep -R -o --include=*.class '\w' | wc -l
grep -R -o --include=*.class '\w' | awk '{print $3}' > ProjectOutputs.txt

while read LINE; do
    echo 'Path '$LINE > 'ProjectOutputs/ClassOut'$index'.txt'
    javap -c $LINE >> 'ProjectOutputs/ClassOut'$index'.txt'
    index=$((index+1))
done <ProjectOutputs.txt

再次感谢大家的帮助!

关于linux - Bash grep 命令查找同一个文件 5 次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31167512/

相关文章:

c - 从函数 readdir 释放(删除)分配的内存

c++ - 用于从 Eclipse 的 .cproject 文件生成 makefile 的独立工具?

python - 有没有办法捕获结构输出的 shell 命令的集合?

linux - 解析大括号中的 block

bash - 使用 awk 命令删除带有 CRLF 的重复文件

php - 如何使用 PHP 和远程 ssh 从文本文件中获取信息?

xml - 在 Perl 中将类似 XML 的格式转换为 CSV

linux - 使用 grep 检查文本文件中的 2 个精确字符串

regex - Grep 模式匹配-下划线

android - 如何在 Ubuntu 上安装 Android SDK?