2016-06-11 39 views
-1

我接受用戶輸入$ 1請求一個日期。人們不能使用幫助頁面,所以當我通過grep傳遞時,我不得不把它弄糊塗了。如何在bash中只保留一個變量中的三個字母

我的輸入是日 - 星期一 - 這一天沒有前面的0,而月份只有3個字母。

我已經做好了所有的事情,除了3個字母「cut-down」。

## stripping leading zero, turning words to lower-case & then capitalizing only the first letter ## 
fdate=$(echo $1 | sed 's/^0//g' | tr '[:upper:]' '[:lower:]' | sed -e "s/\b\(.\)/\u\1/g") 

誰能幫我把「八一」,例如,然後剪下來至8月,在這個單一變量?或者也許另一種方式?我對任何事情都很開放。

在此先感謝!

+0

'M =」八月」;米= 「$ {米:0:3}」; echo「$ m」' – Cyrus

+3

我不能忽視提出問題的諷刺,關於不能使用幫助頁面的人,可以通過閱讀'bash'手冊頁來回答。 – chepner

+0

@chepner,相當的reddit響應,同樣有幫助。 – TJO

回答

4

你可以在bash做到這一點,而無需外部命令:

a='0heLLo wOrld' 
a=${a#0}  # Remove leading 0. Change to ${a##0} to remove multiply zeros 
a="${a:0:3}" # Take 3 first characters 
a=${a,,}  # Lowercase 
a=${a^}  # Uppercase first 
printf "%s\n" "$a" # Hel 

替代它可以在一個sed命令來完成:

% sed 's/^0//;s/\(.\)\(..\).*/\u\1\L\2/' <<< "0heLLo wOrld" 
Hel 

擊穿

s/^0//;     # Remove leading 0. Change to 's/^0*//' to remove multiply zeros 
s/ 
    \(.\)\(..\)    # Capture first character in \1 and next two in \2 
      .*   # Match rest of string 
       /\u\1\L\2/ # Uppercase \1 and lowercase \2 
+0

對sed中的整體教育很有幫助---但是,這是期望前3總是需要的;我期待的東西,是需要看到前三個字母的時期。因此,可能是2016年1月 - 需要採取1月...或者2015年7月4日需要採取7月的任何魔術?再次感謝。 – TJO

+0

@TJO這是一個完全不同的問題。你應該投入更多的時間來製作你的問題,這樣的誤解不會發生:-) – andlrc

+0

我多次閱讀並清晰地給出了例子 - 我想我不能夠清楚所有: - 正如我所說,它要求用戶輸入日期。它可能是任何一個月 - 不管用戶輸入什麼,如果有字母,我只想保留3.我會給你最近的評論一下。謝謝。 – TJO

相關問題