我有一个实用程序(isql 的包装器),它执行 sybase 查询并提供输出。我想用两个选项卡分隔两列。该实用程序的帮助如下:
<-s> : resets the column separator character, which is blank by default
我尝试-s\\t
使用选项卡分隔所有列。
然而尝试 -s\t\t 会给出奇怪的输出,例如:
1\t\tS1\t\tmaindb\t\t1\t\t1\t\t1\t\t1\t\t50\t\t10\t\t0\t\tNULL\t\tNULL\t\tNULL\t\tNULL\t\t1\t\t
我也尝试过-s' '(eight spaces), -s"\t\t", -s/\t/\t(I knew this wouldn't work, but still), -s\2t, -s\t+1
,但似乎没有任何效果。
我该如何解决这个问题?
答案1
如果该isql
命令允许细绳作为其选项的参数-s
而不仅仅是单个字符(我无法测试这一点),那么您应该能够使用指定两个选项卡
isql -s $'\t\t' ...
在bash
壳里。您还可以插入两个文字按两次选项卡Ctrl+VTab,或使用
isql -s "$( printf '\t\t' )" ...
如果该选项不允许使用多个分隔符(如手册中所暗示的,其中显示“列分隔符特点" 而不是 " 列分隔符细绳"),那么除了可能对查询结果进行后处理之外,您无能为力。
以下将加倍来自标准输入流的所有选项卡isql
(使用bash
插入带有 的选项卡$'\t'
;GNU无需使用sed
即可理解,并且在其他 shell 中,使用或上面提到的 hack):\t
$
Ctrl+VTabprintf
isql -s $'\t' ... | sed $'s/\t/&&/g'