sedでpythonファイルのすべての文字列をsnake_caseからcamelCaseに変更する方法

sedでpythonファイルのすべての文字列をsnake_caseからcamelCaseに変更する方法

Commandlinefuでこのようなsedパターンを試しました。

sed -r "s/('[a-z]+)_([a-z])([a-z]+)/\1\U\2\L\3/"

しかし、何とか動作しません。まず、それらが数字を忘れてしまったので、私は修正することができますが、このパターンは1つの下線にのみ機能します。たとえば、私のファイルに文字列がある場合

「foo_bar_foo」

それに変換されます

「fooBar_foo」

。私が欲しいのはそうではありません(欲しい'fooBarFoo'

変数名や他のものではないファイルの文字列だけを変更したいと思います。たとえば、

delta_limits=Limits(general_settings['signal_lower_limit']

これをしなければならない

delta_limits=Limits(general_settings['signalLowerLimit']

ベストアンサー1

_x私が正しく理解したら、文字列内に表示されるたびにに変更したいと思います。X'...'

その後、GNUを使用してsed次のことができます。

sed -E ":1;s/^(([^']|'[^']*')*'[^']*)_([^'])/\1\u\3/;t1"

つまり、引用符ではなく一連の項目を置き換えるか、それに続く引用符と一致します_X'...

次のように入力します。

foo_bar 'ab_cd_ef gh_ij' zz_zz 'aa_bb''
delta_limits=Limits(general_settings['signal_lower_limit']

以下を提供します。

foo_bar 'abCdEf ghIj' zz_zz 'aaBb'
delta_limits=Limits(general_settings['signalLowerLimit']

一重引用符(たとえば)を含む文字列がないとします'foo\'bar'。その場合は、次のように\'エスケープを解釈する必要があります。

sed -E ":1;s/^(([^']|'([^\']|\\\\.)*')*'([^\']|\\\\.)*)_([^'])/\1\u\5/;t1"

(また説明します'foo\\')。

"foo'bar"これにはまだ引用符やバックスラッシュの連続は含まれません。すべてのケースを処理するにはパーサーがpython's '''it's a multi-line quote'''必要です。python

あなたの特定の状況について、

sed -E ":1;s/('\w*)_(\w)/\1\u\2/g;t1"

十分かもしれません(_X後者のもののみ交換'\w*)。これはGNUと同等です(正確な一致sedを除く)。\wグレンのperl方法

おすすめ記事