2013-05-08 31 views
0

我試圖執行一個shell腳本,我需要將看起來像這樣的字符串「00001」轉換爲一個看起來像這樣的字符串; 「1」,並取下左側的所有零。SHELL脫掉字符串左邊的所有零

任何想法如何以最簡單的方式做到這一點?

謝謝!

+0

明白了;):echo「00001」| sed's/0 * //' – TheEnglishMe 2013-05-08 21:16:32

+0

這會將'205'變成'25'。可能不是你的意思。 – Kevin 2013-05-08 21:17:55

+0

你的不安全,試用'2000000',你會看到。 – Kent 2013-05-08 21:18:18

回答

1

使用BASH內置: 

> echo $((0000000001)) 
1 

如果您使用的數字大於7,他們將被解釋爲八進制,所以你需要明確指定進制和十進制:

 
    > val=00010 
    > echo $((val)) 
    8 
    > echo $((10#$val)) 
    10 
2

是這樣的?

kent$ echo "000001"|awk '{$0*=1}1' 
1 

或通過取代:

kent$ echo "000001"|sed 's/^0*//' 
1 
0

一種選擇是使用#操作者用參數擴展。您需要首先啓用擴展的glob支持(使其成爲非POSIX),因爲基本模式功能不足以匹配0字符串。

$ shopt -s extglob 
$ foo="000001" 
$ echo "${foo##+(0)}" 
1 
$ bar=${foo##+(0)} 
$ echo "$foo -- $bar" 
000001 -- 1 

另一個非POSIX選項是替換運算符。這不需要擴展模式支持。

$ echo "${foo//#0}" 
+0

你試過這個嗎? '$ {foo ## 0}'刪除第一個0,留下'00001'或許你的意思是'$ {foo ## * 0}',但是這會刪除所有的_last_ 0,所以它會改變'00102'到'2'。 – 2013-05-08 21:25:50

+1

我犯這個錯誤的頻率比我關心的要多。您需要啓用擴展的glob支持 – chepner 2013-05-08 21:34:03

1

echo「00001」| sed's/0 * //'將返回「1」。 s /表示搜索和替換,它搜索0並將其替換爲空白。

相關問題