Zah*_*ahi 2 shell text-processing
我想编写一个程序,该程序从文本文件中读取并Terminal
每隔一秒逐个字符地打印该文件的单词。
例如,在一个文本文件中,log.txt
假设我有这句话:
I love Unix but I don't know programming.
Run Code Online (Sandbox Code Playgroud)
我想让代码读取上一句并每秒一个一个地打印字母,空格。
Goro 的答案会起作用,但应该注意的是,命令替换会删除 POSIX 标准指定的尾随换行符。因此,您可能不希望实际迭代所有字符,甚至是不可打印的字符。另一个问题是在 bash 和 ksh93 中使用了 C 样式的 for 循环,但在标准 (又名 POSIX-comliant ) 中没有使用/bin/sh
。${variable:index:offset}
参数扩展的形式也是bashism 的类型,并且没有由参数扩展的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
Run Code Online (Sandbox Code Playgroud)
使用此命令,substr()
和system()
都在POSIX awk 中指定,实际上将遍历所有字符。