bash: вывод \ n \ t символов из запроса mysql - PullRequest
1 голос
/ 28 июля 2010

У меня сейчас

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

, и я ожидаю, что вывод, который начинается как это

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

но вместо этого я получаю

Field   Type    Null    Key Default Extra

Я пробовал все виды предметов на данный момент. Я мог бы использовать mysql --html и sed, но я бы хотел пойти туда, только если это не сработает.

спасибо!

Ответы [ 2 ]

1 голос
/ 28 июля 2010

sed - правильный инструмент для этой работы, а не echo.

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

Или, если вы действительно хотите, чтобы все выходные данные были в одной строке:

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

(обратите внимание на четырехкратный побег в вызове sed).

1 голос
/ 28 июля 2010

Удалить внешний эхо:

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

echo при выводе все пробелы будут свернуты.

EDIT: MySQL не выводит экранированные символы, которые вы хотите (например, literal \ then t). В bash (вы должны использовать printf bash) вы можете получить приближение с помощью:

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

Будет выводиться, начиная с:

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

Это цитирование символов для использования с оболочкой. Вы также можете использовать sed, как обсуждалось.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...