【问题标题】:bash: iterating through txt file lines can't read last linebash:遍历txt文件行无法读取最后一行
【发布时间】:2013-05-13 17:10:56
【问题描述】:

while read p; do
echo $p
done < file.txt

此代码可以读取 file.txt 中的所有行,除了最后一行,任何想法都可以。 谢谢

【问题讨论】:

    标签: bash bash4


    【解决方案1】:

    cat file.txt 并查看最后一行是否在最后一行的末尾有新行。 如果没有,则while read p ; do echo $p done < file.txt 不会回显最后一行,在文本文件的最后一行末尾添加一个换行

    【讨论】:

      【解决方案2】:

      如果您对文件中的最后一个\n 有疑问,可以尝试:

      while read p; do
      echo $p
      done < <(grep '' file.txt)
      

      grep 对行尾并不挑剔;)

      您可以使用grep . file.txt 跳过空行...

      【讨论】:

        【解决方案3】:

        正如其他答案所指出的那样,最后一行不包含换行符。但是读取命令实际上设置了p 变量,然后不是返回成功,而是返回文件结束错误。所以这个错误会阻止循环被执行。您仍然可以使用包含文件最后一行的p 变量

        while read -r p || [[ -n "$p" ]]
        do
        echo $p
        done < file.txt
        

        这将测试 2 个条件,与 or 一样,只有当第一个失败时,第二个才会被执行。因此,当最后一行将导致read 中的文件结束错误时,我们将检查p 是否设置。如果是,我们将使用它。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-09-27
          • 2013-03-07
          • 1970-01-01
          • 2019-12-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多