2016-06-15 78 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;) –