Bash脚本太耗费资源

时间:2017-12-07 20:55:01

标签: bash scripting resources

我在bash中编写了一个脚本,它基本上采用wordlist文件并检查它包含的每一行与另一个列表,并将不匹配的行输出到“uniques.txt”。我发现,这是非常耗费资源的,需要花费很多时间。由于我不是计算机科学家或工程师,我真的不知道金属中发生了什么......我听说“C”是一个很好的语言,因为这个问题...代码的一部分:

if [[ "$1" =~ ^\-i(.*)+$ ]]; then
    echo "[*] Testing lines in \""$2"\" against \""$3"\"..."
    for string in $(cat "$2"); do
        if ! cat "$3" | grep -x "$string" &>/dev/null; then
            echo "$string" >> uniques.txt
        fi
    done
fi

此脚本的示例用法是:“$ script”-i“$ wordlist”“$ wordlist_to check_against”。 文件的内容是字符串,中间没有空格,每行一个,如:

johnson
peter
newyork
amsterdam

1 个答案:

答案 0 :(得分:1)

你匹配$ 1的正则表达没有意义。第一个参数应以-i开头,后跟任何至少重复一次的任何内容(包括空字符串)。它与^-i相同,即以-i开头。

"in \""$2"\"很奇怪。它打印$2未加引号,即如果名称包含空格,则可能会显示错误的名称(例如,文件a b将显示为a b)。

in $(cat表示逐个从文件中读取单词,即如果$ 2中每行有多个单词,则它们将单独匹配。

您可以使用grep -f从文件中读取模式,避免导致缓慢的循环:

#! /bin/bash
if [[ $1 =~ ^-i ]]; then
    echo "[*] Testing lines in \"$2\" against \"$3\"..."
    grep -vxf "$2" "$3"
fi