2016-06-11 3 views
-1

Я принимаю ввод пользователя, $ 1, запрашивая дату. Люди не могут использовать страницу справки, поэтому я вынужден их опустить, передавая ее через grep.Как сохранить только три буквы в переменной в bash

Мой вход День-Mon-Year - где день не имеет предшествующего 0, а месяц составляет всего 3 буквы.

У меня есть все, кроме 3-х буквенных «вырезанных».

## 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") 

Может ли кто-нибудь помочь мне взять «Август», например, и сократить его до августа в этой единственной переменной? Или, может быть, другой способ? Я открыт для чего угодно.

Заранее благодарен!

+0

'м =» август "; м = "$ {м: 0: 3}"; echo «$ m» ' – Cyrus

+3

Я не могу игнорировать иронию задавать вопрос, о людях, которые не могут использовать страницу справки, на которые можно было бы ответить, читая man-страницу' bash'. – chepner

+0

@chepner, довольно красноватый ответ и в равной степени полезен. – TJO

ответ

4

Вы можете сделать это в Баш, без внешних команд:

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, где ему нужно взять Ян ... или 04-июля-2015, где ему нужно взять июль. Какую-нибудь магию для этого? Еще раз спасибо. – TJO

+0

@TJO Это совершенно другой вопрос. Вы должны потратить немного больше времени на разработку своих вопросов, поэтому недоразумений, подобных этому, не происходит :-) – andlrc

+0

Я читал его несколько раз, чтобы быть ясным и приводил примеры - я думаю, я просто не могу быть достаточно ясным для всех: \ Как я уже сказал, он запрашивает ввод пользователя для даты. Это может быть любой месяц - и независимо от того, что дано как пользовательский ввод, если есть буквы, я просто хочу сохранить 3. Я дам ваш последний комментарий выстрелом. Благодарю. – TJO

Смежные вопросы