0

ちょっと難しいお願いがあります…

Oracle データベースに接続された特別なアプリケーションを使用します。制御上の理由から、アプリケーションは、アプリケーションによって定義され、データベースの長いフィールドに保存される特殊文字を使用します。

私の仕事は、長いフィールドを定期的にクエリし、変更を確認することです。そのために、bash スクリプトを使用してコンテンツをファイルに書き込み、古いファイルと新しいファイルを md5sum で比較します。

違いがあれば古いファイルをメールで送りたい。問題は、古いファイルにこれらの特殊文字が含まれており、それらを説明する文字列などに置き換える方法がわからないことです。

ASCII コードに基づいて置き換えようとしましたが、うまくいきませんでした。また、ファイル内の外観でそれらを置き換えようとしました。(彼らはこのように見えます: ^P ) これもうまくいきませんでした。

nano などのテキスト エディタでファイルを表示すると、上記のように文字が表示されます。ただし、ファイルで cat を使用すると、そのような制御文字が最初に出現するまでコンテンツが表示されます。

私が知る限り、コンテンツが LONG フィールドにあるという事実のために、データベースからのクエリ中にそれらを置き換える可能性があることがわかっています。

あなたが私を助けてくれることを願っています。

前もって感謝します。

マルコ

4

3 に答える 3

2

^Pは Control-P 文字で、10 進数の 16 または 16 進数の 0x10 で、ASCII のデータ リンク エスケープ (DLE) 文字とも呼ばれます。

ファイル内のすべての 0x10 を別の文字列に置き換えるには、friend を使用できますgsed

gsed "s/\x10/Data Link Escape/g" yourfile.txt

これにより、16 進値 0x10 を含むすべての文字がテキスト文字列 "Data Link Escape" に置き換えられます。おそらく別の文字列を使用したいでしょう - これは単なる例です。

使用しているシステムによっては、 のバージョンが1 文字のエスケープ コードを認識するsed場合、標準コマンドを使用できる場合があります。置換する必要がある 16 進文字が複数ある場合は、置換する必要がある 16 進文字ごとに 1 つのコマンドを含むファイルを作成し、ファイル内のコマンドをまたは使用するように指示することができます。方法についてはまたはのマニュアル ページを参照してください。これを行う。sed\xNNsedsedgsedsedgsed

共有してお楽しみください。

于 2013-07-25T11:43:44.517 に答える
1

1 つのオプションは、 を介してファイルを実行することですcat -v。これは、印刷されない文字を目に見える表現に置き換えます (^制御文字の表記法を使用):

$ echo $'\x10\x12\x13\x14\x16' | cat -v
^P^R^S^T^V
于 2013-07-25T14:19:01.783 に答える