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,必须反向查找的主要内容,如果未能解决你的问题,请参考以下文章
bash:在 shell 脚本中使用正则表达式查找和 grep