在阿尔卑斯Linux中使用正则表达式将单词转换为驼峰式

3

我已经在CentOS中尝试了这个正则表达式:

正则表达式echo 'select-value'|sed -r 's/(-)(\w)/\U\2/g'

输出结果selectValue

但是在Alpine中,当我尝试下面的正则表达式时,无法得到输出:

正则表达式echo 'select-value'|sed -r 's/(-)(\w)/\%U\2/g'

输出结果select%Uvalue

期望输出结果selectValue

请建议正确的正则表达式。

谢谢!


3
你在第二个sed命令中有意放置了百分号%还是打错字了? - Master_ex
这是有意为之的。根据这份文档 https://wiki.alpinelinux.org/wiki/Regex。 - Kannan
1
echo 'select-value' | sed -r 's/(-)(\w)/\U\2/g' 的输出结果在 Alpine 中为 selectUvalue。 - Kannan
我认为它在GNU Sed中可以运行,正如Master_ex所提到的,@UnbearableLightness - Kannan
不要相信那篇文章中的那个人。Alpine Linux 来自嵌入式系统,大小真的非常关键。现在一些疯狂的 Docker 人认为大小(几 MB 的磁盘空间和网络流量)非常重要,以至于他们愿意接受上世纪 80 年代最疯狂的脚本编写方式。(还有乐趣是要求程序使用 musl 而不是 glibc)。如果你想创建有趣而不是问题的东西,请使用基于小型 GNU/Linux 的容器映像。 - hek2mgl
显示剩余7条评论
2个回答

0

看起来alpine默认使用busybox sed。您需要安装gnu sed(它可能已经安装了)。

在docker alpine 3.5容器中,我尝试了这个命令echo 'select-value'|/bin/sed -r 's/(-)(\w)/\U\2/g',并且它可以正常工作。请注意/bin/sed部分。Gnu sed已经安装在docker镜像中。

如果您运气不好,可以使用awk(如果可用):

echo 'select-value-another-value'|awk -F'-' '{ for(i=1; i<=NF; i++) printf toupper(substr($i,1,1)) substr($i,2);printf "\n"}'

我的镜像中使用的是busybox sed,而不是Gnu。第二个对我有用。非常感谢Master_ex - Kannan

0
如果您不必使用sed,可以尝试使用perl:
$ echo 'select-value-but-not-that-one'|perl -pe 's/-(\w)/\u$1/g'
selectValueButNotThatOne

我在我的Alpine实用程序中只有sed(流编辑器),但没有Perl :-( - Kannan

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