Busy Box는 파일을 한 줄씩 읽습니다.

Busy Box는 파일을 한 줄씩 읽습니다.

비지 박스에는 읽기 애플릿이 포함되어 있지 않습니다.

busybox를 사용하여 txt 파일을 한 줄씩 읽는 방법이 있습니까?

지금 내가 가지고 있는 것은

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

답변1

read셸 내장 함수입니다(그렇지 않으면 셸 변수를 설정할 수 없습니다).

따라서 귀하의 busybox가 sh를 기반으로 하는 경우 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와 같은 것을 추가하고 검색해야 합니다.

관련 정보