脊柱式命名法转为驼峰式命名法

15

我的问题与此完全相反:linux bash,驼峰式字符串转换为破折号分隔

我想将some-string-like-this转换为SomeStringLikeThis

有人有一些sed魔法或其他简便方法可以做到这一点吗?

顺便说一下,我认为像Bash这样受欢迎的工具,可能会有一个库可以帮助处理这样的转换...但我还没有找到。如果你知道一个库,能够处理标准命名风格之间的常见字符串操作和转换,例如 spinal 到 underline、underline 到 camel、camel 到 spinal 等,请告诉我。


5
我知道这段话有一些年头了,但是如果你用大写字母开始命名字符串,它被称作帕斯卡命名法(PascalCase),而不是驼峰命名法(camelCase)。这只是提供给其他人参考的。 - wesm
2个回答

31

GNU sed

这适用于GNU sed:

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

匹配行首或-后跟一个字母数字字符,并使用\U将该字符大写。

以下是如何操作变量并将其结果赋值给另一个变量的方法:

name_upper=$(sed -r 's/(^|-)(\w)/\U\2/g' <<<"$name_spinal")

Perl

它在 Perl 中几乎完全相同:

perl -pe 's/(^|-)(\w)/\U$2/g'

本地 Bash

仅供娱乐,以下是一种您可以在本地 Bash 中使用的方法:

spinal_to_upper() {
    IFS=- read -ra str <<<"$1"
    printf '%s' "${str[@]^}"
}

spinal_to_upper "some-string-like-this"

3
Bash解决方案在默认的bash 3.2.57 Mac上无法工作。Perl似乎是最便携的方式。 - wlnirvana
sed 版本对我来说不起作用。 - Noel Yap
1
@NoelYap 你使用GNU sed吗?运行sed而不带参数应该会给你一些提示。如果没有,那么它很可能无法工作,因为它使用了一些其他版本中不可用的扩展。Perl版本更具可移植性。 - Tom Fenech

-8

这非常容易

   $string='this-is-a-string' ;

   echo   str_replace('-', '', ucwords($string, "-"));

输出 ThisIsAString


抱歉,这不是bash而是PHP吗?我认为发帖者是在问bash。 - Fons

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接