2012-01-01 45 views
0

我想的是,在第二列中的所有1400號被映射到的兩個範圍中的CSV文件正則表達式 - 4位數字匹配和替換

1,1456,2,3,4,5 
2,1455,2,3,4,5 

所以匹配和替換數目的4位數字百

1456 -> 256 
1455 -> 255 

我有這樣的正則表達式匹配1400號

',[1][4][0-9][0-9],' 

但如何界定匹配子字符串正則表達式來保留比賽的最後兩位數字?

EDIT

最終改變匹配正則表達式來

,[1][4]([0-9][0-9]) 

和定義爲

,2\1 
在記事本

++

回答

3

匹配與2\1,其中\1是一個替換/14(\d{2})/回參考到第一場比賽。適應您選擇的正則表達風格。

1
sed -e 's/,[1][4]\([0-9][0-9]\),/,2\1,/' 

請注意\(\)語法如何捕獲匹配表達式的一部分,並且\ 1用於說「第一個捕獲的數據」。

0

你應該用一組,即像

',[1][4]([0-9][0-9]),' 

一些正則表達式方言可以讓你命名的基團如in .NET

',[1][4](?<LastTwoDigits>[0-9][0-9]),' 

如果您指定了您正在使用的語言,它將更容易爲您提供幫助。

1

您需要使用backreference - 通過在括號中圍繞正則表達式的一個或多個部分,稍後可以在輸出中引用它們。這是我的最終版本(使用sed -r)。

's/,[1][4]([0-9][0-9])/,2\1/' 
相關問題