Regex 正则表达式只匹配“组1”,而不是“完全匹配”

Regex 正则表达式只匹配“组1”,而不是“完全匹配”,regex,grep,Regex,Grep,嗨,我有以下内容,它应该只返回第9个和第10个垂直条之间的内容| ^\d*,MSH?:[^ |]*\\{9}[^ |]* 但它让我回到了第一组。和全场比赛: 当我将linux grep与regex grep-p'^\d*,MSH?:[^ |]*\\\{9}[^ |]*'export.csv一起使用时 它选择完全匹配: 16037,MSH|^~\&|SENDAPP|SENDFAC|RECVAPP|RECVFAC|1||ORU^R01|78455-874-6875|P|2.3|||AL

嗨,我有以下内容,它应该只返回第9个和第10个垂直条之间的内容|

^\d*,MSH?:[^ |]*\\{9}[^ |]*

但它让我回到了第一组。和全场比赛:

当我将linux grep与regex grep-p'^\d*,MSH?:[^ |]*\\\{9}[^ |]*'export.csv一起使用时 它选择完全匹配:

16037,MSH|^~\&|SENDAPP|SENDFAC|RECVAPP|RECVFAC|1||ORU^R01|78455-874-6875|P|2.3|||AL

如何使grep仅打印组1。78455-874-6875?

因为您已经在使用-p选项,所以最简单的解决方案是在将文本匹配到第9个管道后截断匹配:

A:


由于您已经在使用-p选项,因此最简单的解决方案是在将文本匹配到第9个管道后截断匹配:

A:


你用错工具了。这将清晰、简单、高效、可移植且可扩展地与任何UNIX设备上任何shell中的任何awk配合使用:

$ awk -F'[|]' '/^[0-9]*,MSH/{print $10}' file
78455-874-6875

<> P>任何时候,你的输入被分解成字段或需要复合正则表达式,你应该认真考虑使用AWK而不是GRIP。

< P>你使用错误的工具来做这项工作。这将清晰、简单、高效、可移植且可扩展地与任何UNIX设备上任何shell中的任何awk配合使用:

$ awk -F'[|]' '/^[0-9]*,MSH/{print $10}' file
78455-874-6875
<> P>任何输入到字段或需要复合正则表达式的输入,都应该认真考虑使用AWK代替GRP.

$ awk -F'[|]' '/^[0-9]*,MSH/{print $10}' file
78455-874-6875