您好,团队有一种情况,其中表名称例如
head_must_report
customer_report_sub_division
country_code_universe_nation_part
但是,使用 cut 命令输出应如下所示。注意:表名将是下划线分隔符。
HMR
CRSD
CCUNP
使用 bash 脚本
答案1
没有 Perl,只需使用sed
and tr
:
> sed 's/\(.\)[^_]*_*/\1/g' /tmp/data | tr 'a-z' 'A-Z'
HMR
CRSD
CCUNP
答案2
perl -ple 's/(?:^|_)(.)[^_]*/\U$1/g'
此 Perl 命令从标准输入读取行并根据您在问题中提到的规则进行转换。它使用替换命令 ( s///
) 来执行此操作,该命令提取出现在字符串开头或紧接下划线字符之后的每个字符并将其大写。上面的变体匹配任何字符串中这些位置的字符,但您可能希望通过更改(.)
为([a-z])
仅匹配小写字母来限制这一点。
例子:
$ echo yeah_seem_to_work | perl -ple 's/(?:^|_)(.)[^_]*/\U$1/g'
YSTW
答案3
perl
不使用正则表达式:
perl -lne 'print map {/./;uc $&} split /_/' test
Gnu sed
使用\u
:
sed 's/_*\(.\)[^_]*/\u\1/g' test
Posix sed
:
sed 's/_*\(.\)[^_]*/\1/g;y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' test
Posix awk
(用Gnu awk
、mawk
和测试busybox awk
):
awk -F_ -v OFS="" '{for(i=1; i<=NF; i++) $i = toupper(substr($i, 1, 1))}1' test
python
(2 或 3):
python -c '
import sys
print("".join([k[0].capitalize() for k in sys.argv[1].split("_")]))
' string
答案4
对于雪花来说是
regexp_replace(table_name, '\(.\)\([^_]*_*\)', '\\1')