Bash 如何在文件中查找字符串并将其保存为变量

Bash 如何在文件中查找字符串并将其保存为变量,bash,shell,ubuntu,Bash,Shell,Ubuntu,我想知道一种方法,在bash脚本中查找一串数字并将其保存为变量 例如,我想在auth.log中查找“失败”的请求,并查找导致该请求失败的ip,例如 Failed password for invalid user kim from 183.56.129.146 port 49876 ssh2 我想将IP和用户记录到变量中,比如$user1$ip1,以便稍后在脚本中使用 由于这是auth.log文件,将有大量失败的密码语句和其他内容,我想将这些语句的所有IP和用户集保存在整个文件中,不是作为一个

我想知道一种方法,在bash脚本中查找一串数字并将其保存为变量

例如,我想在auth.log中查找“失败”的请求,并查找导致该请求失败的ip,例如

Failed password for invalid user kim from 183.56.129.146 port 49876 ssh2
我想将IP和用户记录到变量中,比如$user1$ip1,以便稍后在脚本中使用

由于这是auth.log文件,将有大量失败的密码语句和其他内容,我想将这些语句的所有IP和用户集保存在整个文件中,不是作为一个文件保存,而是单独用于以后的iptables命令

有没有一个简单的方法可以做到这一点?请帮助:)

您应该使用,而不是重新发明轮子

如果出于某些奇怪的原因,您不能:

declare -A users # declare an array
$(awk '/Failed password/{print "declare users["$6"]="$8}' /var/log/auth.log)
echo "${users[@]}"  # values
echo "${!users[@]}" # keys

for user in ${!users[@]}; do echo "user $user, ip ${users[$user]}"; done

grep“passwordforroot from”/var/log/auth.log.1 | awk'{print$11}'| grep-v repeated | sort | uniq不是更容易吗?如果我使用它,我将如何将每个IP补丁到iptables语句中?图像中没有任何内容。如果有错误,最好在这里粘贴。也许您需要编辑awk命令来设置正确的第n列,而不是$6和$8。对我来说是11美元和13美元,所以不是免费的编码服务。在这里,开发人员与其他开发人员交谈。