[英]From UNIX shell, how to find all files containing a specific string, then print the 4th line of each file?
我想查找当前目录中包含给定字符串的所有文件,然后仅打印每个文件的第四行。
grep --null -l "$yourstring" * | # List all the files containing your string
xargs -0 sed -n '4p;q' # Print the fourth line of said files.
不同版本的grep的--null
略有不同,但是通常以某种形式存在。 阅读您的手册以获取详细信息。
更新:我相信grep的空文件列表是一种合理的解决方案,它将涵盖绝大多数实际使用案例,但是要完全可移植,如果您的grep
版本不支持任何空输出,则不是与xargs
一起使用完全安全,因此您必须求助于find
。
find . -maxdepth 1 -type f -exec grep -q "$yourstring" {} \; -exec sed -n '4p;q' {} +
因为find
参数几乎可以全部用作谓词,所以-exec grep -q…
部分将最终馈送给sed
的文件过滤为仅包含所需字符串的文件。
尝试下面的GNU find命令,
find . -maxdepth 1 -type f -exec grep -l 'yourstring' {} \; | xargs -I {} awk 'NR==4{print; exit}' {}
它查找当前目录中包含特定字符串的所有文件,并打印每个文件中出现的行号4。
这个for循环应该工作:
while read -d '' -r file; do
echo -n "$file: "
sed '4q;d' "$file"
done < <(grep --null -l "some-text" *.txt)
来自其他用户:
grep -Frl string . | xargs -n 1 sed -n 4p
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.