如何在包含特殊字符的行中执行命令 "grep -oP"?

How to do command "grep -oP" in a line that contains special Characters?

如何 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.

我想grep MSG段下的行

使用这个命令:

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

预期结果:

Kohl's AS2 贸易伙伴请注意,Kohl's 将会发生变化。

实际结果:

注意科尔

我该怎么做?

你只想在 MSG 之后 grep 一切吗?使用其他方法会更简单。 我还看到您的文件中有多个 ^G 字符,与 MSG 字相邻。不确定在 grep 时是否要排除这些。

返回给定的正则表达式 - 您可以添加 \W 来匹配非单词字符并给出您想要的结果。

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

也不需要在此处使用 < 运算符来 grep

你的模式:

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.*'