2016-06-15 62 views
1

我該如何grep一個包含特殊字符的行。如何在包含特殊字符的行中執行命令「grep -oP」?

,例如我有包含此文

ISA^G00^G   ^G00^G   ^G12^G14147844480 ^GZZ^G001165208  ^G160601^G1903^GU^G00401^G600038486^G0^GP^G>~GS^GTX^G14147844480^G001165208^G20160601^G1903^G600038486^GX^G004010VICS~ST^G864^G384860001~BMG^G00^G^G04~MIT^G000000591^GKohl's AS2 Certificate Change June 21, 2016~N1^GFR^GKOHL'S DEPARTMENT STORES~PER^GIC^[email protected]^GTE^G262-703-7334~MSG^GAttention Kohl's AS2 trading partners, Kohl's will be changing. 

我想到grep使用該命令MSG段

線下一個文件:

的grep -OP「MSG。 \ K [\ w \ s \ d] *'<文件名稱

預期結果:

注意科爾的AS2貿易伙伴,科爾的將會改變。

實際結果:

注意科爾

我會怎麼做呢?

+1

'grep的-OP 'MSG \ K. *' filename'? – Cyrus

回答

3

你的模式:

grep -Po 'MSG.\K[\w\s\d]*' 

是因爲你之後將沒有被任何\w\s\d令牌匹配一個單引號只是Attention Kohl匹配。

你也有,.在你想要的部分,所以你也需要匹配那些。另外,\d實際上是\w的子集,因此不需要顯式\d

所以,你可以這樣做:

grep -Po 'MSG.\K[\w\s,.'\'']*' 

或者,如果你只是想匹配,直到結束:

grep -Po 'MSG.\K.*' 
+0

這工程tnx隊友;)我只是增加了一些額外的一些案件 –

+0

這已不適用於壓縮文件。 –

0

你只想在greg之後grep一切嗎?其他方法會更簡單。 此外,我看到您的文件中有多個^G字符,也與MSG字詞相鄰。不知道你是否想在grep'ing時排除這些。

回到你給定的正則表達式 - 你可以添加\W這將匹配一個非單詞字符,並給你想要的結果。

grep -oP 'MSG.\K[\w\s\d\W]*' filename

也沒有必要使用<運營商grep這裏。

+0

我只想grep消息不包括^ G和任何其他人只有消息,還有什麼其他方法,你的意思是你可以給一些tnx;) –