【发布时间】:2014-03-14 12:57:39
【问题描述】:
大家好,我有一个来自this thread的扩展问题
我需要找到一些给定文件名的文件,并在这些文件的最后几行使用 grep 来查找某个字符串。
我目前有:
find my_dir/ -name "*filename*" | xargs grep 'lookingfor'
我是使用这些命令的新手,我将不胜感激。提前谢谢你。
【问题讨论】:
大家好,我有一个来自this thread的扩展问题
我需要找到一些给定文件名的文件,并在这些文件的最后几行使用 grep 来查找某个字符串。
我目前有:
find my_dir/ -name "*filename*" | xargs grep 'lookingfor'
我是使用这些命令的新手,我将不胜感激。提前谢谢你。
【问题讨论】:
例如,您可以这样做:
find my_dir/ -name "*filename*" -exec sh -c "tail -200 {} | grep lookingfor" \;
将200 设置为您想要的最后一行数。
【讨论】:
-H 标志添加到grep 来解决这个问题
STDIN 上工作
tail /path/to/file | grep -H lookingfor给我(standard input):lookingfor
我会选择
find my_dir -name '*filename*' -type f \
-exec /bin/bash -c '(tail -5 "$1" | grep -q lookingfor) && echo "$1"' _ {} \;
这样您将正确处理所有(好吧,希望是所有:-))文件名,甚至那些带有 " 和其他奇怪符号的文件名。另外我建议显式调用 /bin/bash 因为 /bin/sh 可能被链接到像 ash、sash 和 dash 这样的残缺 sh 变体。
【讨论】:
bash -c 'echo \$@=\"$@\";' a b c 给了我$@="b c" :-)。这就是为什么我在命令参数{}之间需要一个额外的_
使用 find + awk + wc -l
find my_dir -name '*filename*' -type f -exec awk 'NR>count-100{print FILENAME, $0}' count=$(wc -l < {}) {} +
将 100 调整为您想要的最后一行数。
【讨论】: