grep在一个目录中,并在Unix Shell脚本

时间:2015-10-13 17:02:07

标签: shell sorting unix scripting grep

我正试图进入一个有几个文件的目录,我正试图通过IP地址grep,我的问题是,在一个文件中,ip地址重复至少3或4次,并且我只想得到1个结果并继续使用另一个文件中的grep

这就是我正在尝试做的事情,我没有任何运气。

grep 10.01.10.0 log/MY_DIRECTORY_FILES* | sort -t . -k 2 | head -1

这只是返回1个结果。

2 个答案:

答案 0 :(得分:2)

head -1返回它看到的整个输入的第一行。你在排序管道的末尾有它。

因此grep会从每个文件中吐出每个匹配的行。 sort然后对所有行进行排序并输出它们。 head然后返回它看到的第一行。

这不是你想要的。您希望grep在每个文件中的第一个匹配后停止。幸运的是,这就是-m的{​​{1}}选项。

  

-m NUM, - max-count = NUM​​

grep

所以你想使用:

Stop reading a file after NUM matching lines.  If the  input  is
standard  input  from a regular file, and NUM matching lines are
output, grep ensures that the standard input  is  positioned  to
just  after the last matching line before exiting, regardless of
the presence of trailing context lines.  This enables a  calling
process  to resume a search.  When grep stops after NUM matching
lines, it outputs any trailing context lines.  When  the  -c  or
--count  option  is  also  used,  grep  does  not output a count
greater than NUM.  When the -v or --invert-match option is  also
used, grep stops after outputting NUM non-matching lines.

如果您的grep -m 1 10.01.10.0 log/MY_DIRECTORY_FILES* | sort -t . -k 2 版本(OpenBSD?Solaris?)没有grep选项(并且没有任何其他等效选项),那么您必须运行-m多次。

grep

您还可以,为了避免运行for file in log/MY_DIRECTORY_FILES*; do grep 10.01.10.0 "$file" | head -n 1 done | sort -t . -k 2 N次,请使用类似的内容(使用grep):

gawk

对于非awk '/10.01.10.0/ {print; nextfile}' log/MY_DIRECTORY_FILES* ,你需要更像这样的东西(未经测试):

gawk

答案 1 :(得分:1)

感谢Etan Reisen 这是他的解决方案,它对我有用!

grep -l 10.01.10.0 log / MY_DIRECTORY_FILES * | wc -l <​​/ p>

我使用grep -l 10.01.10.0 log / MY_DIRECTORY_FILES *进行了验证,并且只显示了1个结果。

由于