bash - случай черты к случаю верблюда - PullRequest
0 голосов
/ 03 июня 2018

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

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

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

Однако, это делаетне работает с busybox: (

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

Ответы [ 2 ]

0 голосов
/ 03 июня 2018

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

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'
0 голосов
/ 03 июня 2018

Я нашел скрипт 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 скрипт, который я написал, так что никаких гарантий

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

...