将第一个字符与特殊字符分离器一起转换为资本



我想使用bash将第一个字符转换为dash( - )之后的资本和字符。

我可以使用 - ,

将单个元素拆分
echo "string" | tr [:lower:] [:upper:]

加入所有人,但这似乎没有影响。有什么简单的方法可以使用单行来照顾这一点?

输入字符串:

JASON-CONRAD-983636

预期字符串:

Jason-Conrad-983636

我建议对此使用Python:

python3 -c 'import sys; print("-".join(s.capitalize() for s in sys.stdin.read().split("-")))'

用法:

capitalize() {
  python3 -c 'import sys; print("-".join(s.capitalize() for s in sys.stdin.read().split("-")))'
}
echo JASON-CONRAD-983636 | capitalize

输出:

Jason-Conrad-983636

在没有任何第三方utils

的纯bash(v4 )中
str=JASON-CONRAD-983636
IFS=- read -ra raw <<<"$str"
final=()
for str in "${raw[@]}"; do 
    first=${str:0:1}
    rest=${str:1}
    final+=( "${first^^}${rest,,}" )
done

并打印结果

( IFS=- ; printf '%sn' "${final[*]}" ; )

这可能对您有用(gnu sed):

sed 's/.*/L&/;s/b./u&/g' file

小写的一切。大写单词的第一个字符。

替代:

sed -E 's/b(.)((B.)*)/u1L2/g' file

您可以尝试以下(如果您可以使用awk)。

var="JASON-CONRAD-983636"
echo "$var" | awk -F'-' '{for(i=1;i<=NF;i++){$i=substr($i,1,1) tolower(substr($i,2))}} 1' OFS="-"

尽管聚会大部分结束了,请让我加入perl解决方案:

perl -pe 's/(^|-)([^-]+)/$1 . ucfirst lc $2/ge' <<<"JASON-CONRAD-983636"

使用ucfirst函数可能很狡猾:)

最新更新