비지 박스에는 읽기 애플릿이 포함되어 있지 않습니다.
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
그렇지 않으면 백슬래시는 이스케이프 문자로 처리되어 제거됩니다(이스케이프되지 않은 경우).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와 같은 것을 추가하고 검색해야 합니다.