2017-02-20 4 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 

システム情報:

のLinux 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で区切られた文字列をエコーし​​た場合、またはヌルで区切られたファイルをcatした場合は、何も表示されません。

質問に答えるには、trユーティリティを使用してヌル文字を削除できます。

たとえば、tr '\0' '\n' <file(または<<<"$var")を使用すると、ヌル文字が改行文字に変換されます。
同様tr '\0' ' '

、スペースにヌル文字を変換しますそれとも、ヌル文字を削除するtr -d '\0'を使用することができます。

備考:
あなたの文字列にnull文字の存在で遊んで開始する前に、あなたは何をしているか知っていることを確認してください...多くのプログラムを入力し、セパレータをフィールドとしてNULL文字を処理する能力があることに注意してください他のいくつかのプログラムでは、実際にはヌル区切りにする必要があります。また、このnullで区切られた文字列を生成するプログラムは、別の区切り文字に基づいてデータを提供するように調整することができます。マニュアルを読んでください。

備考2:
念のためのsedで、ヌル文字も削除することができます。sed 's/\x00/ /g' file
これはまた、空間にNULL文字(16進コード00 = \のX00)を変換します。
Sedを-iスイッチと組み合わせて、インプレースで変更を適用することができます。

+0

あなたは私の問題を解決します!説明に本当に感謝:) –

0

私はあなたがスクリプトで何をしているのか分かりません。以下のコマンドの助けを借りて "^ @"をファイルから削除することができます。

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

ファイルに文字列 '^ @"が含まれている可能性は低いです。 –

+0

正確には、リテラル文字ではないため、このコマンドは機能しません。特別な区切り文字(ヌル文字) –

関連する問題