2010-01-20 7 views
1

Je travaille sur un projet où il s'agit d'importer/exporter des données de tables de bases de données en utilisant des scripts ksh et des scripts Perl. Nous avons un processus existant pour exporter des données d'une table vers un fichier et il est ensuite importé dans un autre système.Comment gérer les paramètres de caractères ASCII non-imprimables?

Voici la capture - le processus d'exportation vide les fichiers délimités par des tuyaux alors que le système qui effectue l'importation attend les fichiers délimités par le caractère séparateur de groupe ASCII qui est décimal 29, hexadécimal 1d ou octal 35. Il apparaît dans vi comme ^] En ce moment, je convertis le délimiteur via un script Perl. Ce que je voudrais faire est de dire à notre processus d'exportation d'utiliser simplement le délimiteur que nous attendons. Quelque chose comme:

export_table.ksh -d « \ 035 »

Le problème est que je ne peux pas comprendre comment transmettre ce caractère au script d'exportation.

J'ai essayé toutes sortes de combinaisons de guillemets simples, de guillemets doubles, de contre-obliques, et la version octale et hexadécimale de ce caractère.

Je suis sur Solaris 10 en utilisant ksh et/ou Perl.

+0

Pour l'octal, il suffit d'ajouter un signe dollar avant la première citation simple: '$ '\ 035'' –

Répondre

2

Avez-vous essayé:

$ '\ x29'

réellement essayer cela pour]:

echo $'\x5d' 

et^

echo $'\x5e' 

donc vous avez juste besoin de faire :

export_table.ksh -d $'\x5e\x5d' 
+0

Désolé, je n'étais pas assez clair dans ma question. J'ai mis à jour mon exemple de ce que j'aimerais travailler. Je ne veux pas ^] comme délimiteur. C'est simplement ce que vi affiche si j'ouvre l'un des fichiers dans le format attendu. Je veux le caractère ASCII du séparateur de groupe qui est le code ASCII 29 ou hexadécimal 1D. Je vais essayer ce que vous suggérez et vous dire si cela fonctionne. –

+0

echo $ '\ x1d' semble faire l'affaire. Merci! –

0

Dans bash (1), on peut préfixer un caractère avec^v pour entrer ce caractère mot à mot. Peut-être ksh (1) fait la même chose?

+0

Cela fonctionne, mais je dois être capable de le faire à partir d'un script, pas seulement interactivement. La réponse d'ennuikiller fonctionne un peu mieux pour cette raison. –

Questions connexes