호스트에서 고정 길이 파일의 특정 속성을 가져오면서 가비지 문자를 얻었으므로 이 가비지 문자가 개행 문자로 읽혀지고 결과적으로 전체 데이터가 손상되었습니다.
파일의 데이터 예
0401000000030020170628000000710000366400201706280002750035*T000100N▒101892928550383900000009201 00000000000008402017062800000020 0000006435000000000000000840A1E098D09D9279BE4000561510A00003220000000000000000000000FF
0401000000030020170628000000710000365400201706280001041125
T000100N▒101909856755446700000018201 00000000000008402017062800000000 00000067540000000000000008402ED730917E9D1DC040000B0810A04003240000000000000000000000FF
가비지 문자를 받았지만 첫 번째 레코드는 정확 *T000100N▒
하지만 두 번째 레코드의 경우 T000100N▒
가비지 문자가 새 줄 문자로 읽혀집니다.
답변1
귀하의 예에서 sed
성공 :
sed '/^.\{216\}$/!N;s/./?/59' file
이 주소는 /^.\{216\}$/!
필수 216자 길이가 아닌 행에서 다음 명령을 실행합니다. 이 경우 줄이 분할되어 N
나머지 줄을 읽는다고 가정합니다.
그런 다음 명령 은 레코드의 s
59번째 문자( *
또는 개행 문자)를 물음표로 바꿉니다(필요에 따라 변경).
이는 귀하의 예에서는 작동하지만 다른 임의 바이트나 멀티바이트 문자가 스크립트를 손상시킬지는 확실하지 않습니다.
따라서 sed
모든 경우에 작동하지 않는다면 다음과 같은 훌륭한 도구를 사용하십시오.bbe
이진 데이터를 포함한 고정 길이 레코드를 처리하는 데 이상적입니다.
bbe -b ":219" -e 'r 58 ?' file
-b ":219"
블록 크기를 219(줄 바꿈 및 멀티바이트 문자 포함)로 정의하고 r 58 ?
오프셋 58의 바이트를 물음표로 바꿉니다(따라서 59번째 문자임).