2014-03-24 41 views
1

我的輸入信息可以是:「abc1-abc-ab-0/1/2」或「abc1-abc-0/1/2」。我需要一個幫助來獲得我的返回變量在一行。在我的正則表達式代碼中,我得到了兩行maches。誰能幫我?如何設置我的正則表達式只返回一行?

[[email protected]]# echo "abc1-abc-ab-0/3/7" | grep -oP '^(([a-zA-Z0-1]){4})-(([a-zA-Z]){3})|-(([a-zA-Z]){2})' 
abc1-abc 
-ab 
+0

你想要什麼輸出? – anubhava

+0

你在3和2個char塊之間的正則表達式中有一個管道字符。你想要那個嗎? – deanosaur

+0

在用戶「Trygve Flathen」幫助下的最終解決方案是: '[root @ server]#echo「abc1-abc-ab-0/3/7」| ((a-zA-Z0-1]){4}) - (([a-zA-Z]){3})| - (([a-zA-Z]){2 })'| xargs回聲| tr -d'' abc1-abc-ab' 謝謝大家! – rodolfo

回答

0

兩種方式在一行收集命令的輸出:

echo $(command) 

command | xargs echo 
1

可能需要這個表達式

# ^(([a-zA-Z0-1]){4})-(([a-zA-Z]){3})(-(([a-zA-Z]){2}))? 

^ 
(       # (1 start) 
     ([a-zA-Z0-1]){4}   # (2) 
)        # (1 end) 
- 
(       # (3 start) 
     ([a-zA-Z]){3}    # (4) 
)        # (3 end) 
(       # (5 start) 
     - 
     (       # (6 start) 
      ([a-zA-Z]){2}    # (7) 
    )        # (6 end) 
)?       # (5 end) 
+0

+1表示在重新構造正則表達式時,OP的多線問題消失。把它放在一起:'echo「abc1-abc-ab-0/3/7」| (([a-zA-Z0-1]){4}) - (([a-zA-Z]){3})( - ( }))?「'。 – mklement0

2

換行符是由於grep -o。我會通過| tr '\n' ' '

相關問題