bash - 针对骆驼案的破案

时间:2018-06-03 16:33:28

标签: bash awk sed tr busybox

我写了以下内容,将foo-bar-baz转换为FooBarBaz

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

(如果出现问题,请随意纠正上述内容)

但是,它不适用于busybox :(

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

2 个答案:

答案 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中使用FSORSawk

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脚本,所以没有保证

但是,必须有更好的方法。 。