2017-02-20 3 views
0

isql (Sybase)의 출력을 리디렉션하려고하는데 파일 끝에 ^@의 끝에 이상한 문자가 반환됩니다. 전체 파일에 대해이 문자를 삭제해야합니다. BBDD에서이 기능을 구현하지 않았기 때문에 쿼리 내에서 출력 리디렉션을 사용할 수 없습니다.파일에서 "^ @"문자를 어떻게 제거 할 수 있습니까?

예 :

Node:SNMP_ALU_FTTH:INACT:Rack_1_SubRack_1_Slot_5_PON_4_ONT_34^@;Network Fail^@;1487336303; 
내가 파일로 리디렉션 경우에만 발생

:

./script.pl > result.txt 

시스템 정보 :

리눅스 XXXXXXX 2.6.18-194.el5 # 1 SMP (화) Mar 16 21:52:39 EDT 2010 x86_64 x86_64 x86_64 GNU/Linux

나는 파일 위에 "dos2unix"를 시도했지만 n 변경된 사항이

+1

"BBDD"란 무엇입니까? –

+2

'^ @'는 널 문자를 표시하는 일반적인 방법입니다. –

+0

어떻게 파일을보고 계십니까? –

답변

2

로 이미 의견에 언급,이 기호는 실제로 비 인쇄 문자 null 문자의 표현입니다.

null로 구분 된 문자열을 표시하거나 null로 구분 된 파일을 표시하는 경우 아무 것도 표시되지 않습니다.

질문에 대답하기 위해 tr 유틸리티를 사용하여 null 문자를 제거 할 수 있습니다.

예를 들어 tr '\0' '\n' <file (또는 <<<"$var")을 사용하면 null 문자가 새 행으로 음역됩니다.
마찬가지로 tr '\0' ' '

, 공간에 널 문자를 변환합니다 또는 당신은 널 (null) 문자를 삭제 tr -d '\0'를 사용할 수 있습니다.

설명 :
문자열에 null 문자가있는 상태로 재생하려면 먼저 프로그램에서 입력 필드 구분 기호로 널 문자를 처리 할 수있는 기능이 있는지 확인하십시오. 일부 다른 프로그램에서는 실제로 데이터를 null로 구분해야 할 수도 있습니다. 또한이 null로 분리 된 문자열을 생성하는 프로그램은 다른 분리자를 기반으로 데이터를 제공하도록 조정될 수 있습니다. 매뉴얼을 읽으십시오.

비고 2 :
그냥 기록을 위해, 널 (null) 문자는 나오지도 제거 할 수 있습니다 : sed 's/\x00/ /g' file
이 또한 null 문자 공간 (16 진수 코드 00 = \ x00부터)를 변환합니다.
Sed를 -i 스위치와 결합하여 변경 사항을 적용 할 수 있습니다.

+0

당신은 내 문제를 해결합니다! 설명 주셔서 정말 고마워요 :) –

0

나는 스크립트에서 무엇을하고 있는지 잘 모르겠습니다. 그러나 아래 명령을 사용하여 파일에서 "^ @"을 제거 할 수 있습니다.

sed -i -e "s/\^\@//g" result.txt 
+2

파일에 리터럴 "^ @"시퀀스가 들어 있지 않은 것 같습니다. –

+0

리터럴 문자가 아니기 때문에이 명령이 작동하지 않습니다. 특별한 구분 기호 (null char) –

관련 문제