24

以下のパターンを変更したいと思います。

getFoo_Bar

に:

getFoo_bar

(下のbに注意)

foo も bar も知らない、置換パターンは何ですか?

書き始めました

sed 's/\(get[A-Z][A-Za-z0-9]*_\)\([A-Z]\)/\1

「\2 小文字」と書きたいのですが、どうすればいいですか?

たぶんsedは適応されていませんか?

4

7 に答える 7

36

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 は変更されていないことに注意してください。

于 2010-05-04T05:27:03.537 に答える
26
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
于 2009-03-27T12:37:22.767 に答える
8

やや短い:

echo getFoo_Bar | sed 's/_\(.\)/_\L\1/'
于 2009-03-27T12:45:55.540 に答える
6

私が思いつくことができる最短:

echo getFoo_Bar | sed 's/_./\L&/'
于 2011-04-19T14:04:56.247 に答える
2

これにはperlを使用できます。

perl -pe 's/(get[A-Z][A-Za-z0-9]*)_([A-Z])/\1_\l\2/'

\lはここでのトリックです。

sedは、一致したグループに対して大文字/小文字を使用しません。

于 2009-03-27T12:40:02.077 に答える
-2
echo getFoo_Bar | sed 's/[Bb]/\L&/g'
于 2012-06-13T13:36:39.540 に答える