Начиная с версии Закари Брэди:
for i in {a..z}
do
( echo $i ;
grep -c "^[^$i]*$i[^$i]*$i[^$i]*$" file1;
grep -m 1 "^[^$i]*$i[^$i]*$i[^$i]*$" file1
) | paste - - -
done
"^[^$i]*$i[^$i]*$i[^$i]*$"
- это гарантия того, что мы получим ровно 2 вхождения $i
(пример ^[^a]*a[^a]*a[^a]*$
)Если вы предпочитаете пример со случайными словами, замените второй grep на
grep "^[^$i]*$i[^$i]*$i[^$i]*$" file1 | shuf | head -1
Другая альтернатива для "ensure exactly two" - find 2 aa и reject if aaa:
grep 'a.*a' file1 | grep -vc 'a.*a.*a'
вы можете:
tail -f /an/existing/regular/file >/dev/null
Это не будет использовать stdin (как read
) и будет ждать нового добавления в /an/existing/regular/file (не не работает с некоторыми файлами: tail -f /dev/null
завершится немедленно. Но будет работать со всеми обычными файлами. Если этот файл не растет, команда будет потреблять мало ресурсов процессора)
GNU sleep
и sleep
, встроенный в ksh93
(но не mksh
) принимают любые числа с плавающей запятой, а не только целые, поэтому вы можете сделать это:
sleep infinity
Просто добавьте команду sleep
.
while true; do sleep 600; done
будет спать в течение 10 минут между циклами.
Не навсегда, но есть сон
. Вы можете комбинировать свой цикл while
со спящим режимом - кажется, что он даже не щекочет процессоры в моем мониторе gkrellm
.
dr01 типы быстрее, чем я :) ... так что больше информации - ваш процессор скачет потому, что он должен постоянно обрабатывать логическую проверку без паузы между....
while true
do
sleep 100
done
Или в виде однострочника
, хотя это правда; спят 100; done
Поскольку вы упомянули ctrl-C, я предполагаю, что вы хотите использовать его в интерактивном терминале. Таким образом, вы можете просто дождаться ввода.
$ read
или просто используйте произвольные другие команды, которые читаются из stdin, такие как cat
. Они ничего не делают до тех пор, пока нет входных данных.
$ cat >/dev/null
или даже лучше без использования stdin:
$ tail -f <<EOF
EOF