Делаем заглавной первую букву каждой строки в выводе Bash скрипта

В этой заметке хочу рассмотреть варианты вывода списков в bash с изменением первой буквы/символа на заглавную.

Буду использовать пример вывода установленных версий Postfix и Dovecot в CentOS:

Пример №1: Циклы for.

В этом примере создается новая переменная $newf, которая состоит из 2-х частей. В первой части с помощью утилиты tr меняется отрезок с 0-го символа по первый с нижнего регистра на верхний.

for f in $(rpm -qa |grep "dovecot\|postfix" |sed 's/-/\ v\./g' |awk '{print $1"_"$2}');
do
	newf=$(tr '[:lower:]' '[:upper:]' <<< ${f:0:1})${f:1};
	echo $newf |sed 's/_v/ v/g';
done

Немного видоизмененный:

for f in $(rpm -qa |grep "dovecot\|postfix");
do
	tf=$(echo $f |sed 's/-/\ v\./g' |awk '{print $1" "$2}')
	newf=$(tr '[:lower:]' '[:upper:]' <<< ${tf:0:1})${tf:1};
	echo $newf |sed 's/_v/ v/g';
done

Пример №2: Цикл while.

Та же логика что и в первом примере, только цикл другой.

while read -r line;
do
	f=$(printf '%s\n' "$line");
	newf=$(tr '[:lower:]' '[:upper:]' <<< ${f:0:1})${f:1}; echo $newf;
done <<< "$(rpm -qa |grep "dovecot\|postfix" |sed 's/-/\ v\./g'|awk '{print $1" "$2}')"

Categories:

Updated: