GNU/Linux >> Linux の 問題 >  >> Linux

Busy Boxはファイルを1行ずつ読み取りますか?

BusyBoxに付属する読み取りアプレットはありません。

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

私が今持っているのは

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

承認された回答:

読む はシェルビルトインです(そうでない場合はシェル変数を設定できませんでした)。

つまり、busyboxの sh ashに基づいています 、それは:

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

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

上記に必要なもの:

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

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

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

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


Linux
  1. 巨大なファイルの線Xから線Yへの猫?

  2. テールはファイル全体を読み取りますか?

  3. 入力行3でパッチを適用するファイルが見つかりませんか?

  1. Bashスクリプトで1行ずつ読む

  2. unix - ファイル内の列数

  3. まだファイルにない場合にのみ、ファイルに行を追加します

  1. Linuxコマンドラインにアクセスしてください

  2. 「ifs=Read -rLine」を理解していますか?

  3. unix - 巨大な .gz ファイルを行ごとに分割する