Как изменить все строки в файле python с snake_case на camelCase в sed

Это похоже на сетевую проблему.

Спросите, изменилось ли некоторое сетевое оборудование или было реконфигурировано. Скажите Вашему администратору сети, что Вы испытываете затруднения ssh'ing при, в брандмауэре может быть неверная конфигурация. Попытайтесь войти в систему от других машин или к другим машинам для улучшения диагноза.

Одной возможной причиной этих признаков является конфликт IP-адреса. Проверьте, где клиент и сервер получают их IP-адрес. Если Вы сохраняете ping server.example.com выполнение, делает оно помогает установить связь, длятся дольше? Если так, у Вас есть конфликт IP-адреса. ( ping помогает, потому что это продолжает говорить маршрутизаторам по пути направлять пакеты IP к Вашей машине — но Вы все еще потеряете соединение, если другая машина отправит ответ ARP перед Вами.), Если это - проблема, необходимо зафиксировать ее: устройте одну из машин, которые используют тот же адрес для использования другого адреса.

Также проверьте таблицу маршрутизации на своей машине. Удостоверьтесь, что пакеты к серверу направляются к надлежащему интерфейсу. (В то время как плохая таблица маршрутизации обычно устанавливала бы связь не, работают вообще, существует пограничный случай, где признаки - те, Вы описываете: если Вы получите адрес с DHCP, и сервер DHCP является также сервером, с которым Вы связываетесь — то адрес сервера DHCP будет направлен к желаемому интерфейсу, пока Ваш кэш ARP не истечет.)

5
31.08.2015, 19:44
2 ответа

Если я правильно понял, вы хотите изменить _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 '). Если это так, вам необходимо учесть эти \ ' escape-последовательности с помощью:

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

(также учитывает ' foo \\ ').

Это все еще не касается "foo'bar" кавычек или строк с обратной косой чертой или python '' ', это многострочные цитаты' '' . Вам понадобится парсер python , чтобы иметь возможность охватить все случаи.

В вашем конкретном случае

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

также может быть достаточно (заменяет только _X , следующие за '\ w * ). Это эквивалент GNU sed (за исключением того, что \ w точно соответствует) подхода Гленна perl .

6
27.01.2020, 20:36

Я бы использовал для этого perl:

perl -pe "1 while s/('\w+)_([^']*)/\$1\\u\$2/" <<END
my_variable = 'a_string_with_snake_case_inside'
delta_llimits=Limits(general_settings['signal_lower_limit']
END
my_variable = 'aStringWithSnakeCaseInside'
delta_limits=Limits(general_settings['signalLowerLimit']

Это означает: пока поиск и замена продолжают находить совпадение, "1" (нет- op, который возвращает истину)

2
27.01.2020, 20:36

Теги

Похожие вопросы