ビジーボックスには読み取りアプレットは含まれていません。
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
それ以外の場合、バックスラッシュはエスケープ文字として処理され削除されます(エスケープされていない場合)。printf
echo
、例えば働かない代わりに-nene
"$line"
引用符で囲みます(いいえ$line
)。それ以外の場合、行の内容はスペースとタブに分割され、ワイルドカードパターンが展開されます。<&3
そして、3< ...
ループ内で生のstdinにアクセスする必要がある場合。
ファイルの最後の行の後に文字が含まれていて、それを表示したい場合は、ループの後に追加できます。
[ -z "$line" ] || printf %s "$line"
このループはバイナリデータ(NUL
文字)を処理できません。
答え2
私は以下を使用して私の要件を解決しました。
head testInputs/test1 -n $getLineNum | tail -n 1
getLineNum は各 while ループでインクリメントされます。
しかし、これは私の質問に対する正確な答えではありません。
また、ループを切断するには、最後の行に#EOFなどを追加して検索する必要があります。