次のパターンを変更したいと思います。
getFoo_Bar
に:
getFoo_bar
(下のbに注意してください)
Fooもbarも知らないので、置換パターンは何ですか?
書き始めました
sed 's/\(get[A-Z][A-Za-z0-9]*_\)\([A-Z]\)/\1
しかし、私は立ち往生しています:「\ 2小文字」を書きたいのですが、どうすればよいですか?
たぶんsedは適応されていませんか?
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
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は変更されていないことに注意してください。
やや短い:
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 | gawk -F_ '{print tolower($2)}'