以下のパターンを変更したいと思います。
getFoo_Bar
に:
getFoo_bar
(下のbに注意)
foo も bar も知らない、置換パターンは何ですか?
書き始めました
sed 's/\(get[A-Z][A-Za-z0-9]*_\)\([A-Z]\)/\1
「\2 小文字」と書きたいのですが、どうすればいいですか?
たぶんsedは適応されていませんか?
sed を使用して getFoo_Bar を getFoo_bar に変更するには:
echo "getFoo_Bar" | sed 's/^\(.\{7\}\)\(.\)\(.*\)$/\1\l\2\3/'
大文字と小文字は次のように処理されます。
\U
すべてのテキストを右大文字にします。\u
最初の文字だけを右大文字にします。\L
すべてのテキストを右小文字にします。\l
最初の文字だけを右小文字にします。(小文字の L に注意してください)この例は、パターン マッチングの 1 つの方法にすぎず、テキストの 1 つのチャンクを変更することに基づいています。例を使用すると、getFoo_BAr は getFoo_bAr に変換されます。A は変更されていないことに注意してください。
s/\(get[A-Z][A-Za-z0-9]*_\)\([A-Z]\)/\1\L\2/g
テスト:
$ echo 'getFoo_Bar' | sed -e 's/\(get[A-Z][A-Za-z0-9]*_\)\([A-Z]\)/\1\L\2/g'
getFoo_bar
やや短い:
echo getFoo_Bar | sed 's/_\(.\)/_\L\1/'
私が思いつくことができる最短:
echo getFoo_Bar | sed 's/_./\L&/'
これにはperlを使用できます。
perl -pe 's/(get[A-Z][A-Za-z0-9]*)_([A-Z])/\1_\l\2/'
\lはここでのトリックです。
sedは、一致したグループに対して大文字/小文字を使用しません。
echo getFoo_Bar | sed 's/[Bb]/\L&/g'