ビジーボックスに付属している読み取りアップルはありません。
Busyboxを使用してtxtファイルを1行ずつ読み取る方法はありますか?
私が今持っているのは
while read line
do
echo $line
done < "$InputFile"
read
はShell組み込みです(そうでない場合、Shell変数を設定できませんでした)。
したがって、busybox sh
がash
に基づいている場合、次のようになります。
while IFS= read -r line <&3; do
printf '%s\n' "$line"
done 3< "$InputFile"
他のPOSIXシェルと同じように。ただし、他のシェルと同様に、 while read
ループを使用してテキストを処理することは、一般的にシェルスクリプトの慣例としては不適切です 。
上記に必要なもの:
IFS=
それ以外の場合は、先頭と末尾のエスケープされていないスペースとタブが行から削除されます-r
、それ以外の場合、円記号はエスケープ文字として扱われ、削除されます(エスケープされていない場合)printf
、たとえば-nene
の行では機能しないecho
ではありません"$line"
引用符で囲まれています($line
ではありません)。それ以外の場合、行の内容はスペースとタブで分割され、グロブパターンが展開されます。<&3
および3< ...
。ファイルの最後の行の後に文字が含まれていて、それらを表示したい場合は、ループの後に追加できます。
[ -z "$line" ] || printf %s "$line"
ループはバイナリデータ(NUL
文字)を処理できないことに注意してください。
を使用して要件を解決することができました
head testInputs/test1 -n $getLineNum | tail -n 1
getLineNumは、whileループごとに増分します。
しかし、それは私の質問に対する正確な答えではありません。
また、最後の行に#EOFのようなものを追加し、それを検索してループを解除する必要があります。