试图在mac上的bash中使用连字符后首字母大写

时间:2013-12-08 10:30:38

标签: regex macos perl

我正在尝试使用sed来更改

等表达式
my-word-now 

my-Word-Now

即。将连字符后的任何单词大写,而不是连字符前的第一个单词。可以有任意数量的连字符。

我试图在mac的bash shell上执行此操作,我相信不支持/ u用于sed大写。所以我试试perl。

我能得到的最接近的是:

echo my word now | perl -pe 's/\S+/\u$&/g'

它给了我My Word Now

但如果我尝试:

echo my-word-now | perl -pe 's/\-+/\u$&/g'

它只是给了我:my-word-now

任何提示?

2 个答案:

答案 0 :(得分:3)

试试这个:

s/-\K(\w)/\U$1/g

(或跳过括号,只使用$&如果这是oneliner的话)。

注意\ U大写; \ u titlecases,这有点不同。

答案 1 :(得分:2)

替换s/\S+/\u$&/g匹配所有非空格字符,然后用大写的第一个字母替换它们。使用捕获更清晰地写,这将是s/(\S+)/\u$1/g

替换s/\-+/\u$&/g匹配所有连字符序列,然后尝试大写这些连字符!连字符没有大写形式,因此不起作用。

更好的解决方案:让我们在每个连字符(?<=-)后面匹配,然后捕获单个字母(\w),并用大写形式替换该字母:\u$1。一起:

s/(?<=-)(\w)/\u$1/g