Sed расчеты - PullRequest
       30

Sed расчеты

2 голосов
/ 25 февраля 2010

Я хочу проанализировать файл CSS и умножить значение каждого пикселя на (2/3). Мне было интересно, возможно ли это с помощью sed? Я знаю, что это неправильный синтаксис, но я думаю, что это даст объяснение того, чего я хочу достичь:

sed -e "s|\([0-9]*\)px|int((\1 * 2)/3)|g" file.css

Так что в основном я хочу взять \ 1, умножить его на (2/3) и привести к и int. Или, возможно, это более возможно с помощью awk? Предположим, я мог бы написать скрипт на python, но хотел бы знать, можно ли это сделать более быстрыми способами.

Спасибо

Ответы [ 4 ]

6 голосов
/ 25 февраля 2010

используйте awk

$ cat file
foo: 3px; bar: 6px

$ awk '{for(i=1;i<=NF;i++){if($i~/^[0-9]+px/){o=$i;sub(/^[0-9]+/,"",o);$i=($i+0)*(2/3)o}}}1' file
foo: 2px; bar: 4px
2 голосов
/ 25 февраля 2010

Вы можете использовать Perl сделать это так:

echo -e "100px;\n20px;" | perl -pe 's{ (\d*) (?=px) }{ $1*(2/3) }xe'
0 голосов
/ 23 января 2017
sed $( sed -rn '
    :X
    /([0-9]+)px/ {
        s##\a\1\a#
        h
        s#.*\a(.*)\a.*#echo -e s/\1px/$((\1 * 2/3))px/g#ep
        x
        bX
    }
    ' cssfile ) cssfile
0 голосов
/ 25 февраля 2010

Чтобы ответить на первоначальный вопрос: Да, вы можете сделать это в sed, и Нет, вы НЕ хотите этого делать, если у вас нет какого-то странного набора ограничений, которые мешают вам использовать любой другой инструмент.

Я говорю это потому, что команда unix dc (настольный калькулятор) была написана на sed, но она работает IIRC, выполняя математику так же, как вы, вероятно, учили математике в школе: манипуляции со строками на цифрах, а также переносы и тому подобное. .

На самом деле вам нужно было бы написать команды умножения и деления (или убрать их из dc.sed), чтобы иметь возможность выполнить это, и результаты будут выполняться на несколько порядков медленнее, чем любое из приведенных выше предложений.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...