Я не вижу способ использовать Busybox sed
, но Вы могли использовать Busybox sh
и grep
как это:
while IFS='
' read -r line; do
printf "%s\n" "$line" | grep -qi '<script' || printf "%s\n" "$line"
done <SOMETHING.html >SOMETHING.html.tmp
mv SOMETHING.html.tmp SOMETHING.html
Для преобразования от частей до десятичных чисел в ударе сделайте что-то как
myvar=$(echo "scale=4; 5/10" | bc)
Затем чтобы сделать цикл на том значении,
for i in $(seq 1 1000); do sleep $myvar; done
Моя реализация сна на Debian (GNU), кажется, принимает десятичные значения сна.
К сожалению..
С такой точностью (4-5 десятичных разрядов), Вы собираетесь хотеть что-то как сценарий жемчуга или скомпилированная программа; издержки вызова любой программы в цикле собираются добавить много дрожания. Вызов самого сна возьмет несколько миллисекунд.
Рассмотрите следующее, 1/10,000ths второго сна, сделанного 1000 раз:
time for i in $(seq 1 1000); do sleep 0.0001; done
real 0m2.099s
user 0m3.080s
sys 0m1.464s
Ожидаемый результат был бы 1/10-м из секунды. Сон нигде не имеет около допусков, которые Вы хотите.
https://stackoverflow.com/questions/896904/how-do-i-sleep-for-a-millisecond-in-perl
использование Времени perl:: HiRes, 1000*1000 микросекунд:
my $i=0;
for($i=0;$i<=1000;$i++) {
usleep(1000);
}
real 0m1.133s
user 0m0.024s
sys 0m0.012s
дает нам намного ближе секунде.
Возможно, можно просто работать
sleep 0.7
?
man 1 sleep
на моем archlinux
дистрибутив:
Пауза ОПИСАНИЯ в течение секунд ЧИСЛА. СУФФИКС Может быть' в течение многих секунд (значение по умолчанию), 'm' в течение многих минут, 'h' в течение многих часов или 'd' в течение многих дней. В отличие от большинства реализаций, которые требуют, ЧИСЛО является целым числом, здесь ЧИСЛО может быть произвольным числом с плавающей точкой. Учитывая два или больше аргумента, пауза для количества времени указана суммой их значений.
sleep
позволяет части? можно ли предложить полный пример с поддельным циклом?
– user1717079
12.10.2012, 23:59
Порождение процесса и загрузки, новый исполняемый файл в нем, вероятно, возьмет несколько миллисекунд, так, чтобы вид точности действительно не имел смысла. Также обратите внимание, что процессорное время во многих системах выделяется процессам частями до 10 мс.
Однако некоторые sleep
реализации берут дробные числа секунд, и и zsh и ksh93 могут сделать их $SECONDS
специальная переменная, дробная с typeset -F SECONDS
.
Пример (zsh):
$ typeset -F SECONDS=0; for ((i=1; i<=70; i++)); do sleep $((1./70)); date +%s.%N; done | { head -n3;echo ..;tail -n3; }; echo $SECONDS
1350076317.374870501
1350076317.391034397
1350076317.407278461
..
1350076318.464585550
1350076318.480887660
1350076318.497133050
1.1393780000
Ой, это дрейфовало. Можно скорректировать время сна на основе $SECONDS
:
$ typeset -F SECONDS=0; for ((i=1; i<=70; i++)); do sleep $((i/70. - SECONDS)); date +%s.%N; done | { head -n3;echo ...;tail -n3; }; echo $SECONDS
1350076420.262775654
1350076420.277012997
1350076420.291302750
../..
1350076421.219682227
1350076421.234134663
1350076421.248255685
1.0020580000
Те 2 дополнительных миллисекунды должны, вероятно, считаться к выполнению последнего sleep
и date
команды.
Также обратите внимание, что zsh имеет a zselect
встроенный с тайм-аутом, выраженным за сотую часть секунды. И ksh93 имеет sleep
встроенный (и принимает плавающие точки), и printf
может распечатать дату/времена.
$ typeset -F SECONDS=0; for ((i=1; i<=70; i++)); do ((i<4 || i>67)) && printf '%(%S.%N)T\n' now; sleep $((i/70.-SECONDS)); done; echo $SECONDS
20.823349000
20.837510000
20.851663000
21.780099000
21.794254000
21.808405000
0.9992358685
Если Вы захотите что-либо более точное, то Вы будете, вероятно, хотеть операционную систему реального времени или операционную систему с оперативными возможностями и конечно не использовать оболочку.
Если Ваша оболочка sleep
не принимает часть, используют жемчуг.
sleep_fraction() {
/usr/bin/perl -e "select(undef, undef, undef, $1)"
}
sleep_fraction 0.01428
Если необходимо узнать часть, использовать echo "scale=5; 1/70" | bc
В Alpine Linux (Busybox) вы можете зацикливать микросекунды с помощью usleep 10
(эквивалент 0,00001
секунды)
GNU sleep
поддерживает доли секунды: sleep 0.00001