bash:从 mysql 查询输出 \n \t 字符

发布于 2024-09-11 19:10:56 字数 374 浏览 5 评论 0原文

我目前拥有

$ 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,但是,如果这不起作用,我只想去那里。

谢谢!

I currently have

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

and I would expect output that starts like this

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

but instead I get

Field   Type    Null    Key Default Extra

I have tried all sorts of items at the moment. I could use mysql --html and sed, but, I would only like to go there if this doesn't work out.

thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

自由如风 2024-09-18 19:11:02

删除外部回显:

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

回显输出会导致所有空格被折叠。

编辑:MySQL 不会输出您想要的转义字符(例如文字 \ 然后 t)。在 bash 中(您必须使用 bash 的 printf),您可以通过以下方式获得近似值:

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

它将输出开头为:


这是引用与 shell 一起使用的字符。正如所讨论的,您还可以使用 sed。

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

这是引用与 shell 一起使用的字符。正如所讨论的,您还可以使用 sed。

Remove the outer echo:

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

echoing the output causes all the spaces to be collapsed.

EDIT: MySQL does not output the escaped characters you want (e.g. literal \ then t). In bash (you must use bash's printf), you can get an approximation with:

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

That will output starting with:


This is quoting the characters for use with a shell. You can also use sed, as discussed.

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

This is quoting the characters for use with a shell. You can also use sed, as discussed.

ゃ懵逼小萝莉 2024-09-18 19:11:01

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 调用中的四重转义)。

sed is the right tool for this job, not echo.

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

Or if you really want all of the output on one line:

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

(note the quadruple escape in the sed call).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文