如何使用 bash 获取每个下划线分隔符的第一个字符

如何使用 bash 获取每个下划线分隔符的第一个字符

您好,团队有一种情况,其中表名称例如

head_must_report

customer_report_sub_division

country_code_universe_nation_part

但是,使用 cut 命令输出应如下所示。注意:表名将是下划线分隔符。

HMR

CRSD

CCUNP

使用 bash 脚本

答案1

没有 Perl,只需使用sedand 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 awkmawk和测试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') 

相关内容