web-dev-qa-db-ja.com

ビジーボックスファイルを1行ずつ読み取る

ビジーボックスに付属している読み取りアップルはありません。

Busyboxを使用してtxtファイルを1行ずつ読み取る方法はありますか?

私が今持っているのは

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

readはShell組み込みです(そうでない場合、Shell変数を設定できませんでした)。

したがって、busybox shashに基づいている場合、次のようになります。

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

他のPOSIXシェルと同じように。ただし、他のシェルと同様に、 while readループを使用してテキストを処理することは、一般的にシェルスクリプトの慣例としては不適切です

上記に必要なもの:

  • IFS=それ以外の場合は、先頭と末尾のエスケープされていないスペースとタブが行から削除されます
  • -r、それ以外の場合、円記号はエスケープ文字として扱われ、削除されます(エスケープされていない場合)
  • printf、たとえば-neneの行では機能しないechoではありません
  • "$line"引用符で囲まれています($lineではありません)。それ以外の場合、行の内容はスペースとタブで分割され、グロブパターンが展開されます。
  • ループ内の元のstdinにアクセスする必要がある場合は、<&3および3< ...

ファイルの最後の行の後に文字が含まれていて、それらを表示したい場合は、ループの後に追加できます。

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

ループはバイナリデータ(NUL文字)を処理できないことに注意してください。

13

を使用して要件を解決することができました

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

getLineNumは、whileループごとに増分します。

しかし、それは私の質問に対する正確な答えではありません。

また、最後の行に#EOFのようなものを追加し、それを検索してループを解除する必要があります。

0
limovala