쉘 스크립트에서 바이너리 파일의 데이터를 읽은 후 바이너리 파일에 데이터를 쓰시겠습니까?

쉘 스크립트에서 바이너리 파일의 데이터를 읽은 후 바이너리 파일에 데이터를 쓰시겠습니까?

누구든지 바이너리 파일에서 일부 데이터를 읽고 해당 데이터를 쉘 스크립트 등의 새 바이너리 파일에 쓰는 방법을 말해 줄 수 있습니까? 저는 리눅스를 사용하고 있습니다.

참고: cat file1 > file2전체 데이터를 기록하므로 필요하지 않습니다.

요구 사항: 일부 데이터를 읽고 쓴 다음 다시 읽고 씁니다.

while read -n1 ch
do
   
    cat $ch > $output   # Tried this, showing error. While writing the data after reading, cat command throws error : No such file or directory.
        
done < $filename

답변1

cat제어하는 데 사용되는 명령입니다.고양이확장을 통해 enate 파일은 단일 파일의 내용을 표준 출력으로 인쇄하는 데에도 사용됩니다. 그것이 cat하는 일은 표준 입력 스트림에 입력된 파일이나 무엇이든 가져와서 인쇄하는 것뿐입니다. 다른 언어의 명령문처럼 인수를 인쇄하지 않습니다 echo. print이는 목적이 아닙니다.

따라서 여기서 작업에 잘못된 도구를 사용하고 있는 것입니다. echo끝에 줄 바꿈을 추가하여(보통 기본값), 무엇을 입력하든 인쇄하기를 원합니다. 또는더 좋고 더 안전하다특히 이진 데이터의 경우 다음과 printf같습니다.

while read -r -n1 ch
do
    printf '%s\n' "$ch" >> "$output"
done < "$filename"

백슬래시를 이스케이프 문자로 해석하지 말라고 지시합니다 -r. 왜냐하면 이후를 사용하면 각 반복에서 덮어쓰게 되고 읽은 마지막 문자와 변수 주변의 따옴표만 볼 수 있기 때문입니다.read>>>>$output쉘의 분할+글로브 확장으로부터 보호하세요..

관련 정보