2010-07-28 6 views
1

J'ai actuellementbash: sortie n caractères t de requête MySQL

$ echo "`echo "use joomla; describe jos_content" | mysql --batch -u root -ppassword`" 

et j'attendre la sortie qui commence comme ça

Field\tType\tNull\tKey\tDefault\tExtra\n 

mais je reçois

Field Type Null Key Default Extra 

J'ai essayé toutes sortes d'objets en ce moment. Je pourrais utiliser mysql --html et sed, mais je voudrais seulement y aller si ça ne marche pas.

merci!

Répondre

1

sed est le bon outil pour ce travail, pas echo.

echo "use joomla; describe jos_content" | mysql --batch -u root -ppassword \ 
     | sed 's/\t/\\t/g; s/$/\\n/' 

Ou si vous voulez vraiment tout de la sortie sur une ligne:

echo "use joomla; describe jos_content" | mysql --batch -u root -ppassword \ 
     | sed 's/\t/\\\\t/g' | while read line ; do echo -n $line\\n ; done 

(noter l'évasion quadruple dans l'appel sed).

+0

cela a bien fonctionné. J'espérais quelque chose d'un peu plus efficace. Mais oh bien. J'ai déjà mis trop de temps à ça. Merci de m'avoir aidé sur mon chemin. – user401090

+0

oh, aussi, qu'est-ce qui se passe avec l'échappement quadrapole !? hehe (je suis curieux) – user401090

+0

ah, après avoir regardé les évasions, je peux faire plus de sens. Merci encore. – user401090

1

Retirez l'écho extérieur:

echo "use joomla; describe jos_content" | mysql --batch -u root -ppassword 

echo ing la sortie provoque tous les espaces à être réduits.

EDIT: MySQL ne génère pas les caractères d'échappement souhaités (par exemple, littéral \ puis t). Dans bash (vous devez utiliser le printf de bash), vous pouvez obtenir une approximation:

printf '%q' "$(echo 'use mysql; describe user;'|mysql --batch -u root '-ppassword')" 

Ce sera la sortie commençant par:

$'Field\tType\tNull\tKey\tDefault\tExtra\n 

Ce cite les caractères pour être utilisé avec une coquille. Vous pouvez également utiliser sed, comme discuté.

+0

merci, mais cela n'affiche pas les caractères spéciaux =/ – user401090

+0

après l'édition, il y a encore des choses liées à la sortie. Mais, j'ai apprécié les réponses et m'a appris à propos de printf. La prochaine fois que j'ai un problème similaire, je devrai me pencher sur printf. Merci encore. – user401090