Bash grep,必须反向查找

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Bash grep,必须反向查找相关的知识,希望对你有一定的参考价值。

我正在创建一个脚本来查找密码中的常用模式。尽管我在主机面板中有安全策略,但由于不兼容,服务器已过时。

例如,当我执行test时,将单词grep -c test123 words.txt放到文件words.txt中。当我寻找该模式时,我需要它来找到它,但是我认为使用命令grep不能为我工作。

脚本:

EMAILPASS=`/root/info.sh -c usera | grep @`

for PAR in ${EMAILPASS} ; do

EMAIL=$(echo "${PAR}" | grep @ | cut -f1 -d:)
PASS=$(echo "${PAR}" | cut -d: -f 2)
PASS="${PASS,,}"
FINDSTRING=$(grep -ic "${PASS}" /root/words.txt)

echo -e ""
echo -e "Validating password ${EMAIL}"
echo -e ""


if [ $FINDSTRING -ge 1 ] ; then
echo "Insecre"
else
echo "Secure"
fi

命令的当前输出如下

# grep -c test123 /root/words.txt
0

我认为grep不能满足我的需求,也许有人可以帮助我。

我也可以使用awk或sed,但是找不到帮助我的选项。

致谢

答案

撤消您的申请。

echo test123 | grep -f words.txt

文本文件的每一行将用作测试输入的模式。

编辑

显然,您实际上确实希望查看整个密码是否是一个真实的单词,而不只是检查它是否基于词典单词。这虽然不太安全,但是很容易做到。除非整个密码与词典中某个单词的完全匹配,否则您拥有的逻辑不会将test123报告为不安全。

您说您要将test放入字典中,并使用test123作为密码,所以我假设您正在寻找字典单词的密码[[基于,这是我上面建议的结构。将在下面包含有注释的备用行。

此外,由于您正在执行不区分大小写的搜索,为什么还要麻烦将密码转换为小写?

declare -l pass # set as always lowecase

会这样做,但没有必要。

同样,除非以后再使用它,否则不必先将所有内容都放入变量中,例如grep结果。尝试删除不需要的任何东西-少即是多。

最后,由于我们没有在变量中捕获grep输出并对其进行测试,因此我将其与-q一起丢弃。我们需要查看的是它是否找到了任何东西,然后由if检查的返回码告诉我们。

/root/info.sh -c usera | grep @ | # only lines with at signs while IFS="$IFS:" read email pass # parse on read with IFS do printf " %s " "Validating password for '$email'" if grep -qi "$pass" /root/words.txt # exact search (-q = quiet) #if grep -qif /root/words.txt <<< "$pass" # 'based on' search then echo "Insecure" else echo "Secure" # well.... fi done

[我认为更好的范例可能是仅报告有问题的示例,并对看起来还不错的示例保持沉默,但这取决于您。

问题?

以上是关于Bash grep,必须反向查找的主要内容,如果未能解决你的问题,请参考以下文章

按时间排序grep结果的简单方法(反向)?

bash:在 shell 脚本中使用正则表达式查找和 grep

在bash脚本中查找包含所有关键字的行

备份一下我的.bash_aliases文件

crontab[计划任务],tar[压缩],grep[查找]

Linux与bash:2.Linux终端命令之三剑客命令(grep,sed,awk)