2017-08-07 86 views
-8

我正在使用數字和字母組合的單個句子。我需要找到最後一次出現的數字,並刪除unix shell腳本中的數字後面的所有字符,但不應刪除最後一次出現的數字。請幫幫我。刪除句子中的最後一行

+3

你嘗試過這麼遠嗎? – CollinD

+0

我創建了一個變量「釋放」,並指定一些值的變量 發佈=「17.5 Mr4.5 --install所有」 雖然呼應變量下面sed命令, 回聲$發佈| sed's/\(。* \)[0-9]。*/\ 1 /' 輸出結果如下(刪除了數字的最後一次出現+其後的所有內容) 17.5 Mr4。 但我們需要預期的輸出(不應該刪除該數字的最後一次出現,之後卻應該刪除的所有內容) 17.5 Mr4.5 請註明邏輯來實現這一 –

+0

'sed的「S/\( 。* [0-9] \)。* $/\ 1 /'' – archemiro

回答

1

沒有任何有效的輸入文件,期望的輸出和代碼很難猜測。

但試試這個:

$ echo "1a2b3cdef" | sed -E 's/(.*)([0-9])([a-z]*$)/\1\2/g' 

輸出是:

1a2b3 

嘗試爲你更新的問題:

echo $Release | sed -E 's/(.*[0-9]).*$/\1/' 

輸出:

17.5 Mr4.5 
+0

好的!任何你爲什麼要在最後一個分組中保留「([a-z] * $)'?任何在最後使用'g'的理由?我認爲你可以這樣簡化它:''s /(。* [0-9])[az] * $/\ 1 /'' – archemiro

+0

@archimiro如果你不需要,使用'g',那'sed '只使用第一場比賽。最後一組是你想要刪除的那個組,這就是爲什麼's'的替換部分沒有後備引用'\ 3'。 –

+0

我會用'i'替換'g',以使其不區分大小寫或使用[a-zA-Z]。既然你沒有引用第三組,我認爲你不需要這個問題。這也可能工作:'sed -E's /(。* [0-9])[az] * $/\ 1/i'' – archemiro

0

假設我們有,例如,

ab=2sxx45dt.t 

然後

basename $ab ${ab##*[0-9]} 

將輸出2sxx45