我使用以下内容创建了一个测试文件:
<cert>
</cert>
我现在正试图用grep和以下命令找到它,但它需要永远运行。 如何快速搜索包含相邻行的文件?
tr -d '\n' | grep '<cert></cert>' test.test
答案 0 :(得分:1)
因此,从评论中,您尝试获取包含空<cert>..</cert>
元素的文件名。你错误地使用了几种工具。正如@iiSeymour指出的那样,tr
只能读取标准输入 - 所以如果你想用它来从大量文件名中选择,你需要使用一个循环。 grep
打印出匹配的行,而不是文件名;虽然您可以使用grep -l
来查看文件名。
但是你只是加入行,因为grep
一次只能行一行;所以让我们使用更好的工具。以下是使用awk进行搜索的方法:
awk '/<cert>/ { started=1; }
/<\/cert>/ { if (started) { print FILENAME; nextfile;} }
!/<cert>/ { started = 0; }' file1 file2 *.txt
检查每一行并跟踪上一行是否与<cert>
匹配。 (!/pattern/
在不匹配/pattern/
的行上将标志设置为零。)将其与所有文件(或使用*.txt
之类的通配符)一起调用。
一个友好的建议:下次,分别尝试每个命令(你已经被困在这几个小时了,你仍然不知道grep
做了什么?)。并快速查看您要使用的工具的手册。 Unix工具通常过于复杂,无法进行简单的试错。