Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 检查word在文本文档中是否出现多次_Bash_Shell_Unix_Scripting - Fatal编程技术网

Bash 检查word在文本文档中是否出现多次

Bash 检查word在文本文档中是否出现多次,bash,shell,unix,scripting,Bash,Shell,Unix,Scripting,基本上,我需要检查一个文件,以查看用户名是否出现多次,如果出现多次,则将该用户名放入另一个文件中 最后,该脚本意味着每3秒钟检查一次用户是否多次登录,如果是,则将其名称添加到名为user.deny的文件中 以下是我目前的基本情况: who -q > temp.file if [ user occurs more than once in temp.file ]; then that username > user.deny fi 我只想知道一种方法来检查临时文件中出现多次的所有单词

基本上,我需要检查一个文件,以查看用户名是否出现多次,如果出现多次,则将该用户名放入另一个文件中

最后,该脚本意味着每3秒钟检查一次用户是否多次登录,如果是,则将其名称添加到名为user.deny的文件中

以下是我目前的基本情况:

who -q > temp.file
if [ user occurs more than once in temp.file ]; then
that username > user.deny
fi
我只想知道一种方法来检查临时文件中出现多次的所有单词/名称。我不能使用
grep
,因为这需要一个模式

提前感谢。

使用Ruby
您可以使用
sort
uniq
awk
执行此操作:

who | awk '{print $1} '| sort | uniq -c | awk '{ if($1 > 1) {print $2} }' >> user.deny
如果要在添加用户名之前进行一些检查,可以将其包装在一个循环中:

for u in $(who | awk '{print $1} '| sort | uniq -c | awk '{ if($1 > 1) {print $2} }')
do
  grep "$u" user.deny || echo "$u" >> user.deny
done

任何用户名或特定用户名?您可以使用grep“username”temp.file | wc-c.对特定用户名进行grepwc-c会给你一个字数,“我正在寻找所有的用户名。”。因此,如果有john和anne登录两次,他们的名字都会进入该文件。如果我在搜索一个特定的名字,我会使用grep“john”,这不会是一个问题,但我不知道那里会有什么名字,它目前运行得很好,只是它会不断地反复添加用户。一个解决方案是做一个if,如果你的代码的产品已经存在于user.deny中,不要添加?现在就完美了。谢谢你!没问题,很乐意帮忙!
for u in $(who | awk '{print $1} '| sort | uniq -c | awk '{ if($1 > 1) {print $2} }')
do
  grep "$u" user.deny || echo "$u" >> user.deny
done