结合 find grep 和 tail

结合 find grep 和 tail

我尝试查找所有以特定名称开头的文件,然后遍历每个文件以查找包含字符串的行,然后仅打印出包含该字符串的每个文件的最后一行。一步一步,我首先在目录中找到所有以“A123”开头的文件

find . -name 'A123*'

然后获取文件中包含“Trial”的每一行

find . -name 'A123*' -exec grep 'Trial' {} \;

然后从这里我只想打印最后一行,

find . -name 'A123*' -exec grep 'Trial' {} | tail -1 \;

但是,最后一个命令不起作用。我该如何修复这个问题才能得到我想要的结果?

答案1

|是 shell 运算符,因此 的整个输出find将传递给tail。您只需运行单身的通过分组所有要运行的命令并传递给shbash(或您喜欢的任何 shell)来在 exec 中执行命令

find . -name 'A123*' -exec bash -c 'grep Trial "$1" | tail -1' grep {} \;

或者你也可以使用其他单个命令来获取最后一场比赛如何 grep 最后一次出现的线条图案


如果你能确保你的文件包含没有特殊字符就像#$/\`&*~-...他们的名字一样你可以使用这个

find . -name 'A123*' -exec bash -c "grep 'Trial' {} | tail -1" \;

但请注意,当出现你不认识的意外名字时,可能会发生奇怪的事情。有关更多信息,请阅读可以find -exec sh -c安全使用吗?

相关内容