我想從給定字符串中提取第一個數字。數字是一個浮點數,但我只需要小數點前的整數。從字符串中提取第一個數字
例如:
string1="something34521.32somethingmore3241"
輸出我要的是34521
什麼是在bash做到這一點最簡單的方法?
謝謝!
我想從給定字符串中提取第一個數字。數字是一個浮點數,但我只需要小數點前的整數。從字符串中提取第一個數字
例如:
string1="something34521.32somethingmore3241"
輸出我要的是34521
什麼是在bash做到這一點最簡單的方法?
謝謝!
這sed的1個班輪將做的工作,我認爲:
str="something34521.32somethingmore3241"
echo $str | sed -r 's/^([^.]+).*$/\1/; s/^[^0-9]*([0-9]+).*$/\1/'
輸出
34521
你說你有一個字符串,並要提取的數目,我假設你有其他的東西,以及。
$ echo $string
test.doc_23.001
$ [[ $string =~ [^0-9]*([0-9]+)\.[0-9]+ ]]
$ echo "${BASH_REMATCH[1]}"
23
$ foo=2.3
$ [[ $string =~ [^0-9]*([0-9]+)\.[0-9]+ ]]
$ echo "${BASH_REMATCH[1]}"
2
$ string1="something34521.32somethingmore3241"
$ [[ $string1 =~ [^0-9]*([0-9]+)\.[0-9]+ ]]
$ echo "${BASH_REMATCH[1]}"
34521
所以只是爲了簡單起見,我會發布當我到達這裏時實際上正在尋找的東西。
echo $string1 | sed '[email protected]^[^0-9]*\([0-9]\+\).*@\[email protected]'
簡單地跳過不管是不是從字符串^[^0-9]*
開頭的數字,再搭配數\([0-9]\+\)
,接着是字符串.*
的休息並打印匹配的數量\1
。
我有時喜歡用@
而不是sed
中的經典/
替換表達式,只是爲了在所有斜槓和反斜槓中提供更好的可見性。在處理路徑時非常方便,因爲您不需要轉義斜線。在這種情況下不重要。只是在說'。
我喜歡你的答案的1班輪方面,但閱讀OP提供的示例數據和輸出。 int()是否將值從字符串中移除? – shellter 2011-04-28 01:07:02
@shellter:當OP最初發布的問題是不同的,並提供了不同的樣本數據。現在由於問題已經更新,所以我需要提出一個替代答案。 – anubhava 2011-04-28 01:16:27
壞OP,壞!不要更改數據! ;-) – shellter 2011-04-28 01:19:48