迷失了为什么要在匹配模式中添加另一个,它无法匹配任何内容?我想要实现的是在每个记录(即123、234和345)中提取Foo的值。
grep -o $"Foo*" grepdebugtest.txt
Foo
Foo
Foo
grep -o $"Foo*," grepdebugtest.txt
(match nothing)
cat grepdebugtest.txt
{"Foo":123,"Goo":456}{"Foo":234,"Goo":567}{"Foo":345,"Goo":678}
预先感谢林
*
grep中的运算符不同于shell中使用的globing运算符。
在grep中*
表示前一个字符的零个或多个重复。您的模式Foo*,
匹配Foo,
Foooooo,
,甚至Fo,
不匹配Foo":123,
。
要获得与shell globing运算符等效的效果,必须.*
在grep中使用。表示任何字符的零次或多次重复(.
是任何字符的运算符)
请注意,采用这种方法很可能仍然找不到您想要的东西,因为grep将匹配greedy并将其{"Foo":123,"Goo":456}{"Foo":234,"Goo":567}{"Foo":345,
作为match Foo.*
。
您可能想用类似的方法来规避该问题Foo[^,]*,
。
还要注意,如果仍然不是拼写错误,则$
在给定的命令行中是完全没有用的,并且命令与grep -o "Foo*" grepdebugtest.txt
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句