Капитализировать в оболочке Solaris

#bash #shell #unix #solaris

#bash #оболочка #unix #solaris

Вопрос:

Привет, я хочу использовать переменную с заглавной буквы в ОС Solaris.

Из HELLO_WORLD в Hello_World

Или также ПРИВЕТ Привет

Пожалуйста, помогите, это ОС Solaris:

Oracle Solaris 10 8/11 s10s_u10wos_17b SPARC Copyright (c) 1983, 2011, Oracle и / или ее филиалы. Все права защищены. Собран 23 августа 2011

Ответ №1:

Если у вас есть Perl:

 % echo HELLO_WORLD FOO bar | perl -pe '($_ = lc $_) =~ s/(b|_)./U$amp;/g'
Hello_World Foo Bar
  

perl -pe считывает данные из стандартного ввода и печатает каждую строку после применения кода Perl, заданного в качестве аргумента. $_ является текущей строкой. lc Функция преобразует строку в нижний регистр. Регулярное выражение соответствует границе слова или подчеркиванию, за которым следует любой символ. s/// Команда заменяет любую соответствующую подстроку на ее эквивалент в верхнем регистре. Завершение g приводит к тому, что замена выполняется как можно больше раз в каждой строке (по умолчанию это делается один раз).

Если у вас нет Perl (я не знаю, включает ли Solaris его по умолчанию), попробуйте это:

 % echo HELLO_WORLD FOO bar | tr A-Z a-z | sed 's/(_|<)./Uamp;/g'
Hello_World Foo Bar
  

Вы могли бы включить отображение верхнего и нижнего регистра в sed команду using y/// , но в отличие tr от нее, похоже, не принимает диапазоны:

 % echo HELLO_WORLD FOO bar | tr A-Z a-z | sed 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/;s/(_|<)./Uamp;/g'
Hello_World Foo Bar