Не уверен насчет sed/gawk
, но вот один сperl
$ echo '0.2rem or 0.5rem 0.6rem' | perl -pe 's/\d+(\.\d+)?(?=rem)/$&*0.5/ge'
0.1rem or 0.25rem 0.3rem
\d+(\.\d+)?
сопоставить цифры с необязательной дробной частью (?=rem)
, чтобы убедиться, что за номером следуетrem
$&*0.5
умножить число на0.5
-модификатор e
позволяет использовать код Perl вместо строки в секции замены
Применение к файлам:
find. -name "*.css" -exec perl -i -pe 's/\d+(\.\d+)?(?=rem)/$&*0.5/ge' {} +
См. также:Почему зацикливание вывода find является плохой практикой?
Один из способов сделать это — отследить системные вызовы, сделанные программой, и отфильтровать системные вызовы open
/ openat
или поиск имени.
Исходными двумя инструментами для этого были truss
для AT&T Unix System 5 и ktrace
для 4.4BSD. (Последний объединяет ktrace
с kdump
, что переводит машиночитаемый -вывод в удобочитаемую -форму. )Более поздним изобретением, пару десятилетий спустя, стала структура DTrace.
Итак, в настоящее время для отслеживания выполнения какой-либо командыwibble
:
truss
унаследована от SunOS. например.truss -o truss.out -t open,openat wibble
ktrace
из 4.4BSD сkdump
. например.ktrace -t n wibble
dtruss
. например.dtruss -t open wibble
strace
. например.strace -o strace.out -e open,openat wibble
FreeBSD и Illumos и их производные также имеют dtrace
et al. как часть фреймворка DTrace, но здесь это излишне для ваших конкретных целей. MacOS dtruss
на самом деле построена на платформе DTrace, поэтому для нее требуются привилегии суперпользователя — недостаток, которого нет ни у одного из других упомянутых здесь инструментов.