怎么做命令" grep -oP"在包含特殊字符的行中?

时间:2016-06-15 02:26:51

标签: bash unix edi

如何grep包含特殊字符的行。

例如,我有一个包含此文本的文件

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^GEDIMIO@kohls.com^GTE^G262-703-7334~MSG^GAttention Kohl's AS2 trading partners, Kohl's will be changing.

我想在MSG细分

下看一下这条线

使用此命令:

grep -oP' MSG。\ K [\ w \ s \ d] *' <文件名

预期结果:

注意Kohl的AS2贸易伙伴Kohl将会改变。

实际结果:

注意Kohl

我将如何做?

2 个答案:

答案 0 :(得分:3)

你的模式:

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

仅与Attention Kohl匹配,因为您之后只有一个引号,而\w\s\d代币都无法匹配。

您所需的部分中还有,.,因此您也需要匹配。此外,\d实际上是\w的子集,因此无需明确\d

所以你可以这样做:

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

或者,如果你只想匹配到最后:

grep -Po 'MSG.\K.*'

答案 1 :(得分:0)

你想在味精之后想要一切吗?用其他方法会更简单。 另外,我看到文件中有多个^G字符,也与MSG字相邻。不确定你是否想在grep'ing时排除那些。

返回给定的正则表达式 - 您可以添加\W,它将匹配非单词字符,并为您提供所需的结果。

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

此处无需<运算符grep