忙碌盒逐行读取文件

忙碌盒逐行读取文件

busy box 没有附带读取小程序。

有没有办法使用busybox逐行读取txt文件?

我现在拥有的是

while read line
do
     echo $line
done < "$InputFile"

答案1

read是 shell 内置函数(如果不是,则无法设置 shell 变量)。

所以,如果你的 busyboxsh基于ash,那么它是:

while IFS= read -r line <&3; do
  printf '%s\n' "$line"
done 3< "$InputFile"

就像在任何 POSIX shell 中一样。但就像任何贝壳一样,使用while read循环来处理文本通常是不好的 shell 脚本实践

以上,您需要:

  • IFS=否则,前导和尾随未转义空格和制表符将从行中剥离
  • -r,否则反斜杠将被视为转义字符并被删除(除非转义)
  • printf,而不是echo不适用于例如-nene
  • "$line"引用(不是$line),否则该行的内容将在空格和制表符上拆分,并且扩展通配模式。
  • <&3并且3< ...,如果您需要访问循环内的原始标准输入。

如果文件最后一行之后包含字符并且您想要显示它们,您可以在循环后面添加:

[ -z "$line" ] || printf %s "$line"

请注意,该循环无法处理二进制数据(NUL字符)。

答案2

我设法通过使用解决了我的要求

head testInputs/test1 -n $getLineNum | tail -n 1

getLineNum 在每个 while 循环上递增。

但这不是我问题的确切答案。

此外,您还需要在最后一行添加一些类似 #EOF 的内容并搜索它以打破循环。

相关内容