我写了以下内容,将foo-bar-baz
转换为FooBarBaz
sed -r 's/^(.)|-(.)/\U\1\U\2/g'
(如果出现问题,请随意纠正上述内容)
但是,它不适用于busybox :(
我可以使用cut
,for
循环,bash子串和tr
来拼凑一些东西,但是必须有一个很好的使用busybox版本的sed,awk等等。想法?
答案 0 :(得分:2)
考虑到您的实际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=""
解决方案第二: 在RS
中使用FS
,ORS
和awk
。
echo "foo-bar-baz" |
awk 'BEGIN{FS="";RS="-";ORS=""} {$0=toupper(substr($0,1,1)) substr($0,2)} 1'
答案 1 :(得分:-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 ' '
注意,这只是我写的第二个awk
脚本,所以没有保证
但是,必须有更好的方法。 。