SET_VALUE(ab.ms.r.gms_dil_cfg.f().gms_dil_mode, dsad_sd );
如何使用sed
仅替换SET_VALUE
,直到_
之后的每个字母为大写?
结果:
SET_VALUE(ab.ms.r.gmsDilCfg.f().gmsDilMode, dsad_sd );
答案 0 :(得分:1)
对于您的输入字符串,您可以应用以下 sed 表达式+ bash 变量替换:
s="SET_VALUE(ab.ms.r.gms_dil_cfg.f().gms_dil_mode, dsad sd )"
res=$(sed '1s/_\([a-z]\)/\U\1/g;' <<< "${s%,*}"),${s#*,}
echo "$res"
输出:
SET_VALUE(ab.ms.r.gmsDilCfg.f().gmsDilMode, dsad_sd );
答案 1 :(得分:0)
在写这篇文章的时候心烦意乱,所以Roman打败了我,但这有一点点变化所以我想把它作为另一种选择发布......
$ s="SET_VALUE(ab.ms.r.gms_dil_cfg.f().gms_dil_mode, dsad_sd );"
$ sed 's/,/,\n/g' <<< "$s" | sed -n '1{s/_\([a-z]\)/\U\1/g;N;s/\n//;p}'
SET_VALUE(ab.ms.r.gmsDilCfg.f().gmsDilMode, dsad_sd );
s/,/,\n/g
:在逗号处将输入分隔为单独的行(在第一行留下逗号,将其余输入推送到第二行)sed
调用现在将使用2行输入sed -n
:在处理输入行时不要打印输入行;我们会在需要时明确p
rint行1{...}
:对于第一行,在大括号内应用命令...... s/_\([a-z]\)/\U\1/g
:对于每个模式,我们发现'_ [az]',将[a-z]
保存在缓冲区#1中,并将模式替换为缓冲区#1内容的大写< / LI>
N
:读取下一行并将其附加到模式空间s/\n//
:将回车符替换为空字符p
:打印图案空间