2013-08-18 53 views
7

我想從大寫的文件名中取出最後兩個字母,並將它們附加到文件名中。我expeceted命令:sed和Mac OS X與上,下和整個捕獲控制序列的區別

ls | sed -e "s/.*\([A-Z][A-Z]\)$/\0\/\L\1\E/" 

實現這一點,在我的Ubuntu箱它工作得很好,但在我的Mac它簡單地打印出一個0/LXXE/其中XX是從捕獲正確的字母。

什麼是\0\L\E在Mac sed的等價物?

我瀏覽過網頁,有幾個人注意到Mac OS X sed與Ubuntu sed不同,但大多數主題都討論了-i文件擴展名或空字符串的要求(之前讓我絆倒了)。

回答

18

OSX sed的是舊版本,不支持的功能\L\E等使用安裝GNU sed的Mac上:

brew install gnu-sed 
+7

'釀安裝--default-名稱gnu-sed'安裝爲'sed'而不是'gsed' – TalkLittle

+1

「以root身份運行自制軟件極其危險,不再支持。」 – arekolek

+1

謝謝@arekolek,這是一個很好的觀點。我編輯過。 – anubhava

6

awk替代:

ls | awk '{print $0 tolower(substr($0,length($0)-1,2))}' 
+0

似乎沒有按要求工作(至少在OS X上) - 最後兩個字符重複。 –

+1

@PaulR:據我所知,OP就是這麼想的:'* ...拿最後兩個字母並附加他們...... *'。如果你想用小寫字母替換最後兩個字符,試試這個:'ls | awk'{print substr($ 0,1,length($ 0)-2)tolower(substr($ 0,length($ 0)-1,2))}'' – mschilli