2014-03-06 30 views
1

我正在嘗試使用重複來修剪輸入模式sed模式,但我得到了意想不到的結果。重複和分組的問題

,我把文本的結構爲:

\s+\d+\s+\d+\s+\d+\s+\d+\[0-9A-Za-z] ... 

我重複使用,以減少對一個線路輸入的音量,使命令簡單讀/調試已經試過:

^\s+((\d+\s+){4})([0-9A-Za-z]).*$ 

當我嘗試使用sed作爲替代命令時,\ 2的值始終等於\ 1的最後一個單詞。如果我將重複次數從4更改爲5,則可以將字母數字模式更改爲\ 2,但也會出現在\ 1中。我需要\ 1中的值作爲別的東西,所以我不想混淆結果或使用工作,例如從\ 1輸出中刪除最後一個單詞。

有沒有人有任何想法爲什麼發生這種情況或我做錯了什麼?

(我知道AWK將是解決這一問題的最簡單的方法,但我決心與sed的解決這個提高我的正則表達式的理解。)

+0

你能證明你的sed命令? – anubhava

+0

你想要做什麼樣的替換? –

回答

0
sed 's/\(\([[:blank:]]\{1,\}[0-9]\{1,\}\)\{4\}\)\([0-9A-Za-z]\)/[\1](\2){\3}/' YourFile 
# \1 +---------------------------------------+ 
# \2 +------------------------------+ 
# \3           +-------------+ 

替代變量都算開括號前面的順序,而不是它在重複的情況下,計

0

你可以用」這樣做。當你重複一個捕獲組時,precedant捕獲會被下一個覆蓋,這就是你的捕獲組包含最後一個匹配的原因。