2011-08-15 151 views
1

我有這樣用sed來羅馬數字轉換爲阿拉伯數字

SKI 
SKII 
SKIII 
SKIV 
SKV 
SKVI 
SKVII 

我想將它與sed命令轉換成數字格式的文本文件。你能幫我嗎?

SK1 
SK2 
SK3 
SK4 
SK5 
SK6 
SK7 

非常感謝!

+0

寫(盜取/剽竊)小羅馬數字轉換器 – KevinDTimm

+1

爲SED沒有代碼,但是許多其他實施例在這裏:http://rosettacode.org/wiki/Roman_numerals/Decode –

回答

1

有沒有無足輕重的方法來做到這一點。需要蠻力加上一些注意:

sed -e 's/SKIII/SK3/' \ 
    -e 's/SKII/SK2/' \ 
    -e 's/SKIV/SK4/' \ 
    -e 's/SKVIII/SK8/' \ 
    -e 's/SKVII/SK7/' \ 
    -e 's/SKVI/SK6/' \ 
    -e 's/SKV/SK5/' \ 
    -e 's/SKI/SK1/' "[email protected]" 

一般來說,較長的序列必須先於較短的序列。這隻涉及1-8;推廣它是適度困難的。


其實是從1到29所需要的數字我該如何處理呢?同樣的方法?

如果你放棄SK前綴,然後稍微小心一點,你不需要29個單獨的-e表達式(儘管這當然會起作用)。這個腳本將帶你到39(測試到31,一個月內的最大天數);需要達到99的擴展是相當明顯的,我相信(我認爲還有13個表達式,-e表達式)。請注意包含零的數字的特殊情況處理。

sed \ 
    -e 's/IX/9/' \ 
    -e 's/XXX$/30/' \ 
    -e 's/XXX/3/' \ 
    -e 's/XX$/20/' \ 
    -e 's/XX/2/' \ 
    -e 's/X$/10/' \ 
    -e 's/X/1/' \ 
    -e 's/VIII/8/' \ 
    -e 's/VII/7/' \ 
    -e 's/III/3/' \ 
    -e 's/II/2/' \ 
    -e 's/IV/4/' \ 
    -e 's/VI/6/' \ 
    -e 's/V/5/' \ 
    -e 's/I/1/' "[email protected]" 
+0

實際數量從1至29.我該如何處理它?同樣的方法? – Jianguo

+0

如果在替換字符串的末尾添加'$',則不需要任何順序。 – jfg956

+0

欣賞它。這真的很有幫助! – Jianguo