【问题标题】:How to do command "grep -oP" in a line that contains special Characters?如何在包含特殊字符的行中执行命令“grep -oP”?
【发布时间】:2016-06-15 02:26:50
【问题描述】:

如何 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 将发生变化。

实际结果:

科尔注意

我该怎么做?

【问题讨论】:

  • grep -oP 'MSG.\K.*' filename?

标签: bash unix edi


【解决方案1】:

你的模式:

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

【讨论】:

  • 这很有效 tnx mate ;) 我只是为某些情况添加了一些额外的内容
【解决方案2】:

您只想在 MSG 之后对所有内容进行 grep 处理吗?使用其他方法会更简单。 我还看到您的文件中有多个 ^G 字符,也与 MSG 字相邻。不确定是否要在 grep'ing 时排除这些。

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

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

这里也不需要使用< 运算符来grep

【讨论】:

  • 我只想 grep 消息,不包括 ^G 和任何其他消息,以及你的意思还有什么其他方法,你能不能给一些 tnx ;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-24
  • 2018-04-29
相关资源
最近更新 更多