Regex awk模式匹配

Regex awk模式匹配,regex,awk,Regex,Awk,排成这样 21Z机箱外围设备组合LOGITECH 176-83-LODMK250 LOGITECH 无线桌面MK250 920-002653 920-002653 ΔΙΑΘΕΣΙΜΟ 16,90 0,24,22,82 我正在尝试使用/^[0-9]\{2,3\}-[0-9]\{2,3\}-*/print$i提取/176-83-LODMK250/ 但它不起作用 一些建议 谢谢。开头的“^”将尝试在字符串的开头找到它,但实际情况并非如此。此外,表达式末尾的*将与字符串结尾匹配。正如d-li

排成这样

21Z机箱外围设备组合LOGITECH 176-83-LODMK250 LOGITECH 无线桌面MK250 920-002653 920-002653 ΔΙΑΘΕΣΙΜΟ 16,90 0,24,22,82

我正在尝试使用/^[0-9]\{2,3\}-[0-9]\{2,3\}-*/print$i提取/176-83-LODMK250/

但它不起作用

一些建议


谢谢。

开头的“^”将尝试在字符串的开头找到它,但实际情况并非如此。此外,表达式末尾的*将与字符串结尾匹配。

正如d-live所述,您需要删除^。^匹配整个字符串的开头,即在您的示例中的21zCases之前,而不是匹配字符串的开头

我相信这就是你想要的:

/[0-9]{2,3}-[0-9]{2,3}-[^[:space:]]*/

下面是正则表达式的工作原理

  echo "21zCases-Peripherals Combo LOGITECH 176-83-LODMK250 LOGITECH WIRELESS DESKTOP MK250 920-002653 920-002653 ΔΙΑΘΕΣΙΜΟ 16,90 0,24 22,82" | grep -i "[0-9]\{2,3\}-[0-9]\{2,3\}-.*" 

你好一开始就是这样,因为我需要以数字而不是[a-z]开头的字符串。目标字符串不是以所需字符串开头。所以在正则表达式中有一个“^”永远不会匹配。尝试从表达式中删除“^”符号,您将看到一个匹配。模式是以2个或3个数字开始,然后再以2个或3个数字开始,然后再以2个或3个数字开始,并且在所有操作之后是,因为所需的模式显示在字符串的中间,所以模式中不能有“^”。只有当原始字符串以您的模式开头时,^内部模式才会匹配。我现在无法用语言来表达这一点。