Как вы умножаете на 10 с помощью регулярных выражений? - PullRequest
1 голос
/ 31 марта 2011

У меня есть проблема, которая может быть приравнена к проблеме умножения на десять чисел.Первый подход был бы:

   perl -pi -e 's/(\d+)/\1 0/g' myfile.txt

, но это вводит дополнительный пробел, и я не могу поставить \ 10 , потому что такая группа не существует.Моим решением был этот обходной путь

   perl -pi -e 's/(\d+)/\1\l0/g' myfile.txt

до в нижнем регистре 0, но я уверен, что есть правильный способ, которого я не знаю.

С уважением.

Ответы [ 4 ]

8 голосов
/ 31 марта 2011

Вы должны использовать форму $1 вместо \1 в подстановках.На самом деле это одна из причин: с переменной формой вы можете сказать ${1}0.

5 голосов
/ 31 марта 2011

Не используйте обозначение \1 в RHS замещения.Используйте $1.

Существует, как правило, проблема неоднозначности между обратными ссылками и восьмеричной нотацией.Или был.Теперь это решено.

В последних версиях Perl, когда вам нужно однозначно обозначить обратную ссылку, вы можете использовать \g{1}, а когда вам нужно однозначно указать восьмеричное число, вы можете использовать \o{1}.

4 голосов
/ 31 марта 2011

Вы можете использовать модификатор /e:

perl -pi -e 's/(\d+)/$1 * 10/ge' myfile.txt

См. Также Предупреждение \ 1 вместо $ 1

0 голосов
/ 23 марта 2014

Я хотел бы расширить ответ Евгения просто для большей точности, чтобы включить цифры. Особенно если бы вы делали что-то, кроме умножения на десять, например, деление на половину.

perl -pi -e 's/(?<!\d|\.)(\d+(?:\.\d+)?)(?!\d|\.)/$1 * 10/ge' file.txt

Также здесь есть версия для игнорирования цветов в шестнадцатеричном формате или процентах. Удобно, если вы модифицируете CSS.

perl -pi -e 's/(?<!#|\d|\.)(\d+(?:\.\d+)?)(?!%|\d|\.)/$1 * 10/ge' file.txt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...