2016-02-26 37 views
0

我有一個特殊格式的字符串的巨大的文本文件。我怎樣才能快速創建另一個文件,只有對應我的條件的字符串?如何從文件中只獲取特殊字符串(通過條件)?

例如,文件內容:

[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" 

,我只需要字符串 「MyRule的」 和 「貓」? 我認爲它應該是perl或bash,但沒關係。 非常感謝,對於noob問題抱歉。

+0

'grep「myRule。* cat」' - [man grep](http://linux.die.net/man/1/grep) - 一旦您對正則表達式的結果感到滿意,就可以在Perl中使用它(例如使用'=〜'運算符或其他Perl函數)。 – DevSolar

回答

1

這是正確的,每個條目是兩行長嗎?然後你可以使用sed

sed -n '/myRule/ {N }; /myRule.*cat/ {p}' 
  • 第一條規則追加nextline時myRule比賽
  • 第二條規則嘗試匹配myRule隨後在patternspace一個cat到patternspace,如果發現它打印patternspace
1

如果你的文件真的很大,以至於它不適合內存(儘管在現代計算機系統中文件高達幾千字節),那麼唯一的wa y是要麼改變記錄分隔符或以讀取對

這示出了第一方法,並假定每對的第二行以雙引號後跟一個換行

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" 
相關問題