我正试图进入一个有几个文件的目录,我正试图通过IP地址grep,我的问题是,在一个文件中,ip地址重复至少3或4次,并且我只想得到1个结果并继续使用另一个文件中的grep
这就是我正在尝试做的事情,我没有任何运气。
grep 10.01.10.0 log/MY_DIRECTORY_FILES* | sort -t . -k 2 | head -1
这只是返回1个结果。
答案 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个结果。
由于