2014-09-19 42 views
0

我在我的KSH腳本中使用了帶有兩種模式的grep命令。
文件中有換行符,兩個模式都在不同的行中。
這裏是命令 -忽略LINE Break的KSH中的GREP函數

grep -l 'RITE AID.*ST.820' natriter820u.20140914 
Pattern1 - RITE AID 
Pattern2 - ST*820 

我沒有得到任何與此結果,而如果我沒有換行,然後它的工作原理不同的文件替換該文件。 是否有任何解決此問題的方法來處理換行符。

這裏是樣本數據: -

ISA*00*   *00*   *ZZ*NATIONSBANK *14*0030020520500 *140918*1200*U*00401*000006436*0*P*^ 
GS*RA*014578892*IGIHCJEEJ*20140918*1200*6442*X*004010 
ST*820*000006482 
N1*PR*RITE AID HDQTRS. CORP.*1*014578892 

能有人幫。

謝謝

回答

0

No. grep是面向行的。

你不能這樣匹配。

雖然通過使用交替,但您可以通過模式獲得匹配線。

grep -l 'RITE AID\|ST.820' natriter820u.20140914 

要找到既具有匹配你需要鏈中的調用grep或使用其他工具(如awk)的文件。

awk '/RITE AID/{pat1++} /ST.820/{pat2++} pat1&&pat2{print FILENAME; exit}' natriter820u.20140914 

對多個文件進行操作(如grep):

grep 'RITE AID' natriter820u.20140914 | grep -q 'ST.820' && echo natriter820u.20140914 

要使用awk對單個文件進行操作

gawk '/A/{p1++} /d/{p2++} p1&&p2{print FILENAME; p1=0; p2=0; nextfile}' file1 file2 file3 file4 
+0

感謝伊坦,但是這會給所有這些將使文件有這些模式中的任何一個都不是要求。有沒有其他方法可以獲得理想的結果? – 2014-09-19 20:12:46

+0

@RaghavGarg編輯。 – 2014-09-19 20:18:01