如何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
我将如何做?
答案 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
。