我尝试查找所有以特定名称开头的文件,然后遍历每个文件以查找包含字符串的行,然后仅打印出包含该字符串的每个文件的最后一行。一步一步,我首先在目录中找到所有以“A123”开头的文件
find . -name 'A123*'
然后获取文件中包含“Trial”的每一行
find . -name 'A123*' -exec grep 'Trial' {} \;
然后从这里我只想打印最后一行,
find . -name 'A123*' -exec grep 'Trial' {} | tail -1 \;
但是,最后一个命令不起作用。我该如何修复这个问题才能得到我想要的结果?
答案1
|
是 shell 运算符,因此 的整个输出find
将传递给tail
。您只需运行单身的通过分组所有要运行的命令并传递给sh
或bash
(或您喜欢的任何 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
安全使用吗?