选择一个字段并将其通过管道传递给其他程序

时间:2014-09-10 01:38:35

标签: mysql bash pipe

如何从查询结果中仅选择一个特定字段,并通过明文管道将其传递给其他程序,例如grep的?

echo 'SELECT field FROM database.table WHERE id = 10' | mysql | grep something

使用该命令,我会在顶部获得一个字段名称,并将所有内容都特殊地转义,例如:换行符为\n,其他特殊字符也是如此:

field
somewhere\n\tsomething\n\tnothing

我需要得到的只是:

somewhere
    something
    nothing

2 个答案:

答案 0 :(得分:1)

原来这两个选项可以解决问题:

mysql --silent --raw

使用--raw时,它不会转义任何内容,而使用--silent时,它不会打印列名称。

答案 1 :(得分:0)

我认为sedprintftail的某种组合可以解决问题。

您可以使用tail仅获取最后一行(跳过field),sed以确保干净的无参数printf - 样式字符串,{{1 printf`本身用于翻译特殊字符。

我会从类似的东西开始(为了便于阅读而跨越多行,但你应该将它作为一个命令):

and

以下脚本提供了一个示例,由于我没有运行MySQL,因此使用了dummied up数据:

printf "$(echo 'SELECT field FROM database.table WHERE id = 10'
    | mysql
    | tail -1l
    | sed 's/%/%%/g')"