Busy Boxはファイルを1行ずつ読み込みます。

Busy Boxはファイルを1行ずつ読み込みます。

ビジーボックスには読み取りアプレットは含まれていません。

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

今私が持っているのは

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

答え1

readシェル組み込み関数です(それ以外の場合はシェル変数を設定できません)。

したがって、あなたのbusyboxshがに基づいている場合は、ash次のようになります。

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

POSIXシェルと同じです。しかし、他の殻と同様にループを使用してwhile readテキストを処理することは、通常、悪いシェルスクリプトの実践です。

上記では、以下が必要です。

  • IFS=それ以外の場合は、エスケープされていない先行スペースと末尾のスペースとタブが行から削除されます。
  • -rそれ以外の場合、バックスラッシュはエスケープ文字として処理され削除されます(エスケープされていない場合)。
  • printfecho、例えば働かない代わりに-nene
  • "$line"引用符で囲みます(いいえ$line)。それ以外の場合、行の内容はスペースとタブに分割され、ワイルドカードパターンが展開されます。
  • <&3そして、3< ...ループ内で生のstdinにアクセスする必要がある場合。

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

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

このループはバイナリデータ(NUL文字)を処理できません。

答え2

私は以下を使用して私の要件を解決しました。

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

getLineNum は各 while ループでインクリメントされます。

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

また、ループを切断するには、最後の行に#EOFなどを追加して検索する必要があります。

関連情報