2017-09-03 63 views
0
SET_VALUE(ab.ms.r.gms_dil_cfg.f().gms_dil_mode, dsad_sd); 

替代小寫如何使用sed僅從SET_VALUE直到替換,每個字母_後要大寫?如何使用SED

結果:

SET_VALUE(ab.ms.r.gmsDilCfg.f().gmsDilMode, dsad_sd); 
+0

可能的複製[上 - 以小寫使用sed](https://stackoverflow.com/questions/689495/upper-to-lower-case-using-sed) –

回答

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

有_在第二學期,我不想受到影響.. dsad_sd – shd

+0

@shd,好的,檢查我的更新 – RomanPerekhrest

+0

'\ U'是Perl的貸款,一般不支持大多數'sed'實現。 – tripleee

0

了,而寫這一個這麼羅馬打我衝分心,但是這有輕微的變化,從而想我會發布它作爲另一種選擇......

$ 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的內容的大寫替換模式1
  • 在這一點上,我們已經對第1行進行了所需的編輯(即原始輸入中的逗號之前的所有內容),現在...
  • N:讀取並追加下一行到模式空間
  • s/\n//:替換成空字符
  • 回車在這一點上,我們已經粘貼線#1和#2在一起成爲一個單一的線
  • p:印刷圖案空間的