bash - 破折号到驼峰式

bash - dash case to camel case

我写了以下内容来将 foo-bar-baz 之类的内容转换为 FooBarBaz

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

(如有不妥欢迎指正)

但是,它不适用于 busybox :(

我可以用 cutfor 循环、bash 子字符串和 tr 拼凑一些东西,但必须有一个很好的衬垫使用 busybox 版本sed、awk 等等。想法?

我找到了一个 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 脚本,所以不能保证

不过,一定有更好的方法。 . .

考虑到您的实际 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: 使用 RSFSORS awk.

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