从文本文件中读取并一次一个字符地打印单词

Zah*_*ahi 2 shell text-processing

我想编写一个程序,该程序从文本文件中读取并Terminal每隔一秒逐个字符地打印该文件的单词。

例如,在一个文本文件中,log.txt假设我有这句话:

I love Unix but I don't know programming.
Run Code Online (Sandbox Code Playgroud)

我想让代码读取上一句并每秒一个一个地打印字母,空格。

Ser*_*nyy 8

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 中指定,实际上将遍历所有字符。

  • @don_crissti 我需要找到一个比“bashism”更好的短语,因为我总是提到 `ksh` 和 `zsh`。我们可以开始使用类似 `{ba,k,z}sh` 之类的东西吗?:) (2认同)
  • 我认为只提及非 posix 或非标准就可以了... (2认同)