Bash 将Awk命令转换为脚本时遇到的问题

Bash 将Awk命令转换为脚本时遇到的问题,bash,awk,Bash,Awk,我在 即,解析/var/log/secure以检查受攻击帐户/攻击IP的两个 我真的很想把它们转换成一个更简单的命令,可以用su运行,而不是试图记住它们。 我尝试过shell脚本和direct awk脚本,但总是会出现各种错误,通常与单引号有关,有时与语法有关(取决于我使用或省略的双引号和单引号的组合) 我似乎无法获得正确的组合,因此任何帮助都将不胜感激。当无法直接进一步简化某些内容时,将其转换为简单命令的最佳方法是创建脚本或函数。将前者放在路径的目录中,或将后者放在从~/.bashrc获取的~

我在
即,解析/var/log/secure以检查受攻击帐户/攻击IP的两个 我真的很想把它们转换成一个更简单的命令,可以用su运行,而不是试图记住它们。
我尝试过shell脚本和direct awk脚本,但总是会出现各种错误,通常与单引号有关,有时与语法有关(取决于我使用或省略的双引号和单引号的组合)


我似乎无法获得正确的组合,因此任何帮助都将不胜感激。

当无法直接进一步简化某些内容时,将其转换为简单命令的最佳方法是创建脚本或函数。将前者放在
路径的目录中
,或将后者放在从
~/.bashrc
获取的
~/bin/functions
等文件中


有时这是不可能的或不实用的,但类似的东西可以从指定的快捷方式为您输入,而无需记忆完整的命令。

当无法直接进一步简化时,将某个命令转换为简单命令的最佳方法是创建脚本或函数。将前者放在
路径的目录中
,或将后者放在从
~/.bashrc
获取的
~/bin/functions
等文件中


有时这是不可能的或不实用的,但类似的东西可以从指定的快捷方式为您输入,而无需记忆完整的命令。

始终将shell应该忽略的任何内容(例如您的awk代码片段)用单引号括起来。shell不以任何特殊方式处理单引号文本。但是,双引号文本是插入的,因此您必须小心。如果您说出每个示例的错误,这会很有帮助。啊,好吧,用单引号将整个代码段括起来提供了这一点;top5accounts.sh:第2行:意外标记““*”sshd.*失败的密码(无效用户)?”,@FizzBuzz:您发布的命令在我看来很好,我不明白您的错误来自何处。请告诉我你没有把上面的一行用引号括起来!为什么要添加更多的引号?这不是正确的做法。总是用单引号括住shell应该忽略的任何内容,例如您的awk代码片段。shell不以任何特殊方式处理单引号文本。但是,双引号文本是插入的,因此您必须小心。如果您说出每个示例的错误,这会很有帮助。啊,好吧,用单引号将整个代码段括起来提供了这一点;top5accounts.sh:第2行:意外标记““*”sshd.*失败的密码(无效用户)?”,@FizzBuzz:您发布的命令在我看来很好,我不明白您的错误来自何处。请告诉我你没有把上面的一行用引号括起来!为什么要添加更多的引号?这不是正确的做法。是的,我知道……这是我问题的全部重点。我想从那些巨大的命令转到类似“shtop5accounts.sh”的东西@FizzBuzz:将其中一个命令完全按照您的问题所示保存,在该名称的文件中不加任何引号,就完成了。您还可以将第一行设置为
#/bin/bash
和do
chmod u+xtop5accounts
这样,您就可以运行脚本,而无需将
sh
放在开头。建议不要在脚本名称末尾使用
.sh
。稍后,如果您用另一种语言重写脚本,如果它被称为
foo.sh
.aa,那么它就没有意义了。显然,我一直在使用#将它转换为一个.sh文件/第一行的bin/sh成功了-我的错!是的,我知道……这就是我问题的全部要点。我想从那些巨大的命令转到类似“shtop5accounts.sh”的东西@FizzBuzz:将其中一个命令完全按照您的问题所示保存,在该名称的文件中不加任何引号,就完成了。您还可以将第一行设置为
#/bin/bash
和do
chmod u+xtop5accounts
这样,您就可以运行脚本,而无需将
sh
放在开头。建议不要在脚本名称末尾使用
.sh
。稍后,如果您用另一种语言重写脚本,如果它被称为
foo.sh
.aa,那么它就没有意义了。显然,我一直在使用#将它转换为一个.sh文件/第一行的bin/sh成功了-我的错!
awk 'gsub(".*sshd.*Failed password for (invalid user )?", "") {print $1}' /var/log/secure* | sort | uniq -c | sort -rn | head -5

awk 'gsub(".*sshd.*Failed password for (invalid user )?", "") {print $3}' /var/log/secure* | sort | uniq -c | sort -rn | head -5