bash - случай черточки к случаю верблюда

Я написал следующее, чтобы преобразовать что-то вроде foo-bar-baz в FooBarBaz

sed -r 's/^(.)|-(.)/\U\1\U\2/g'

(Не стесняйтесь исправлять вышесказанное, если что-то не так)

Тем не менее, он не работает с busybox:(

Я мог бы сделать что-нибудь вместе cut, for петли, подстроки bash и tr, но должен быть хороший лайнер, использующий версию busybox sed, awk, что угодно. Мысли?

2 ответа

Решение

Учитывая, что ваш фактический Input_file(данные) такой же, как показанные образцы, если да, то следующие awk(ы) может помочь вам здесь.

echo "foo-bar-baz" |
awk -F"-" '{for(i=1;i<=NF;i++){$i=toupper(substr($i,1,1)) substr($i,2)}} 1' OFS=""

Решение 2-е: с использованием RS, FS а также ORS в awk,

echo "foo-bar-baz" | 
awk 'BEGIN{FS="";RS="-";ORS=""} {$0=toupper(substr($0,1,1)) substr($0,2)} 1'

Я нашел сценарий awk, который в верхнем регистре первая буква каждого слова. я использую tr чтобы преобразовать тире в пробелы, запустите скрипт, который я украл, затем используйте tr убрать пробелы:

echo "foo-bar-baz" \
    | tr '-' ' ' \
    | awk '{for(i=1;i<=NF;i++){ $i=toupper(substr($i,1,1)) substr($i,2) }}1' \
    | tr -d ' '

Обратите внимание, это только 2-й awk сценарий я написал, так что никаких гарантий

Тем не менее, должен быть лучший способ.,,

Другие вопросы по тегам