Конечно, вы можете использовать cat или cp. Но у dd есть больше возможностей, таких как резервное копирование / восстановление загрузочного сектора или копирование ограниченного количества случайных данных из / dev / random.
В Википедии есть более подробное описание различных вариантов использования.
Вы можете сделать это с помощью Perl
, как показано:
perl -pe 'BEGIN{$/=\1;$|=1;} sleep 1' log.txt
-p
автоматически напечатает текущую запись перед получением следующей. $/=\1
заставит perl
читать входной поток по байтам за раз, при условии, что символы имеют размер байта. $|=1
будет буферизовать вывод. Вы можете сделать это
var=$(cat log.txt)
for (( i=0; i<${#var}; i++ )); do
sleep 1 | echo -ne "${var:$i:1}"
done
echo ""
Ответ Горо будет работать, но следует отметить, что подстановка команды удаляет завершающие символы новой строки, как указано в стандарте POSIX . Таким образом, это может быть нежелательно, когда вы хотите фактически перебрать все символы, даже не -печатные. Другая проблема заключается в том, что стиль цикла C -используется в bash и ksh93, но не в стандарте (, также известном как POSIX -, совместимый)/bin/sh
. Форма расширения параметра ${variable:index:offset}
также является типом башизма и не специфицируется определениями расширения параметра POSIX (, хотя и поддерживается ksh93
иzsh
).
Тем не менее, есть способ перебирать все символы в файле переносимым и гораздо более практичным способом . Это использоватьawk
:
# all characters on the same line
$ awk '{for(i=1;i<=length;i++){ printf "%c",substr($0,i,1); system("sleep 1");}; print}' input.txt
# all characters on separate lines
$ awk '{for(i=1;i<=length;i++){ print substr($0, i, 1); system("sleep 1"); }}' input.txt
С помощью этой команды substr()
и system()
оба указываются в POSIX awk и фактически перебирают все символы.
С помощью bash
или ksh93
вы можете читать отдельные символы с помощью встроенной в оболочку команды -в read
:
while IFS= read -r -n 1 c; do
printf '%c' "$c"
sleep 1
done < log.txt
printf '\n'
Вот решение на Python:
python -c "from time import sleep
with open('/tmp/file.txt') as f:
for line in f:
for c in line:
print(c, end='', flush=True);sleep(1);"
Вы должны просто вставить это в командную строку и изменить имя входного файла.