如何从查询结果中仅选择一个特定字段,并通过明文管道将其传递给其他程序,例如grep的?
echo 'SELECT field FROM database.table WHERE id = 10' | mysql | grep something
使用该命令,我会在顶部获得一个字段名称,并将所有内容都特殊地转义,例如:换行符为\n
,其他特殊字符也是如此:
field
somewhere\n\tsomething\n\tnothing
我需要得到的只是:
somewhere
something
nothing
答案 0 :(得分:1)
原来这两个选项可以解决问题:
mysql --silent --raw
使用--raw
时,它不会转义任何内容,而使用--silent
时,它不会打印列名称。
答案 1 :(得分:0)
我认为sed
,printf
和tail
的某种组合可以解决问题。
您可以使用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')"