我怎样才能从文件中获得特殊字符串(按条件)?

时间:2016-02-26 14:06:12

标签: bash perl

我有一个包含特殊格式字符串的巨大文本文件。如何快速创建另一个只包含与我的条件相对应的字符串的文件?

例如,文件内容:

[2/Nov/2015][rule="myRule"]"GET
   http://uselesssotialnetwork.com/picturewithcat.jpg"
[2/Nov/2015][rule="mySecondRule"]"GET
   http://anotheruselesssotialnetwork.com/picturewithdog.jpg"
[2/Nov/2015][rule="myRule"]"GET
   http://uselesssotialnetwork.com/picturewithzombie.jpg"

我只需要#34; myRule"和"猫"? 我认为它应该是perl或bash,但它并不重要。 非常感谢,抱歉没有问题。

2 个答案:

答案 0 :(得分:1)

是否正确,每个条目长两行?然后,您可以使用sed

sed -n '/myRule/ {N }; /myRule.*cat/ {p}'
  • myRule匹配
  • 时,第一条规则将下一行附加到模式空间
  • 第二条规则尝试在模式空间中匹配myRule后跟cat,如果发现它打印模式空间

答案 1 :(得分:1)

如果你的文件真的很大,以至于它不适合内存(尽管在现代计算机系统中文件高达几千兆字节),那么唯一的方法是更改​​记录分隔符或者读成对的行

这显示了第一种方式,并假设每对的第二行以双引号后跟换行结束

perl -ne'BEGIN{$/ = qq{"\n}} print if /myRule/ and /cat/' huge_file.txt

这是第二次

perl -ne'$_ .= <>; print if /myRule/ and /cat/' huge_file.txt

当您将样本数据作为输入时,两种方法都会产生此输出

[2/Nov/2015][rule="myRule"]"GET
   http://uselesssotialnetwork.com/picturewithcat.jpg"