如何使用grep查找与两行模式匹配的文件?

时间:2015-11-29 21:30:10

标签: grep

我使用以下内容创建了一个测试文件:

<cert>
</cert>

我现在正试图用grep和以下命令找到它,但它需要永远运行。 如何快速搜索包含相邻行的文件?

tr -d '\n' | grep '<cert></cert>' test.test

1 个答案:

答案 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工具通常过于复杂,无法进行简单的试错。