如何用sed替换小写

时间:2017-09-03 14:00:45

标签: bash sed

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 );

2 个答案:

答案 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:在逗号处将输入分隔为单独的行(在第一行留下逗号,将其余输入推送到第二行)
  • 此时我们已将输入分为2行;第二个sed调用现在将使用2行输入
  • sed -n:在处理输入行时不要打印输入行;我们会在需要时明确p rint行
  • 1{...}:对于第一行,在大括号内应用命令......
  • s/_\([a-z]\)/\U\1/g:对于每个模式,我们发现'_ [az]',将[a-z]保存在缓冲区#1中,并将模式替换为缓冲区#1内容的大写< / LI>
  • 此时我们已经对#1行进行了所需的编辑(即原始输入中逗号之前的所有内容),现在......
  • N:读取下一行并将其附加到模式空间
  • s/\n//:将回车符替换为空字符
  • 此时我们已将第1行和第2行合并为一行
  • p:打印图案空间