Grep没有抓住整个模式

时间:2016-01-27 19:57:12

标签: regex linux grep

我想要摆脱的模式是这样的: 一个城市后跟一个方向指示箭头( - >或< - ),然后是另一个城市,然后是另一个指向箭头。

我想,也许是因为我没有逃脱一些角色,但我试图逃避它们,并没有得到所需的结果。

我运行此命令:

grep -o  '(\|stockholm\|paris\|tokyo){1}[<->]{2}(\|stockholm\|paris\|tokyo){1}[<->]{2}'

对像这样的文本数据:

tokyo->paris->$NILL1110102.8 fubar$`BLACKFri$$$SunBluePurpleOct011001Sun3.1415
Sun[<-->]0000103.14011010taoNILL$101101010001`3.14153$$$$$$phiparis->paris->
paris<-tokyo<-RedOrange
2.8VOID'$$[<-->]000010WHITEstockholm->stockholm->WHITE2.8taoSunWHITEphifooblah
FriNILLtao`paris<-tokyo<-WHITEVOIDNULLOrange101000phifubarOct$VOIDMon'[<-<-]$$ 
001100blah[<-<-]stockholm->paris->fubarfubar'FebYellow[<-->]NovNULL011001WHITE`$

我写的grep命令确实选择了城市,但没有指向箭头,我想知道为什么以及是否有人可以为我提供一些亮点。

感谢。

编辑:请不要使用sed或perl或其他任何不同的解决方案,我希望在这里了解我的错误,谢谢。

输出我得到:

paris
paris
paris
stockholm
stockholm
paris
stockholm
paris

期望的输出;

stockholm->stockholm->
paris<-tokyo<-
stockholm->paris->

1 个答案:

答案 0 :(得分:1)

认为这会做你想要的吗?

grep -Eo '(stockholm|paris|tokyo){1}[<>-]{2}(stockholm|paris|tokyo){1}[<>-]{2}' jozo
tokyo->paris->
paris->paris->
paris<-tokyo<-
stockholm->stockholm->
paris<-tokyo<-
stockholm->paris->