如何在终端窗口上输出制表符(ASCII 十六进制 0x09)?
在我的所有实验中,制表符出现在终端上时都会更改为空格。例如
$ echo -e "xx\t\tyy"
xx yy
xx
这不是我想要的,因为和之间的空格yy
填充了 14 个空格而不是 2 个制表符。我尝试了stty tab0
、stty tab1
、stty tab2
和stty tab3
,但都给出了相同的结果。
我使用的是 GNOME Terminal 2.16.0 和 Red Hat Enterprise Linux Client 版本 5.9。
背景:我想用鼠标选择终端上的文本并粘贴到 Excel 中。当我从 Emacs 中执行此操作(字段之间有 0x09 选项卡)时,字段最终位于不同的列中。我喜欢这个,并且希望从终端复制粘贴时有相同的行为。但是,目前所有字段最终都作为第一列中的一个字符串。当我在 Emacs 中的字段之间有空格 (0x20) 时,行为与从终端复制粘贴时的行为相同。
答案1
制表符不是可打印字符。 Tab 是一个控制字符,通常使光标前进(但不在行尾),而使其跳过的字符保持不变。
gnome-terminal
(和其他vte
基于 的模拟器)有一个特殊的技巧,它尝试保留选项卡以进行复制粘贴,但是,它仍然会在软换行时丢失它们。其他模拟器也可能有这样的黑客攻击,但通常不会。
答案2
如果你使用
printf "xx\t\tyy"
应该扩展到真正的制表符。echo
关于的行为bash
一直不稳定。我bash
在 Debian 7 上进行了测试,发现既没有echo -t
也/bin/echo -t
没有给出选项卡,但确实printf
给出了选项卡(将输出重定向到文件以确保)。这是脚本:
#!/bin/bash
echo -t "xx\t\tyy"
echo done
/bin/echo -t "xx\t\tyy"
echo done
echo "xx\t\tyy"
echo done
/bin/echo "xx\t\tyy"
echo done
printf "xx\t\tyy"
echo done
和输出到终点站:
-t xx\t\tyy
done
-t xx\t\tyy
done
xx\t\tyy
done
xx\t\tyy
done
xx yydone
这与放置字符的额外问题不同在终端屏幕。一般来说,大多数终端只有空间可选择剪切/粘贴(无论是否打印标签)。为了那个原因 -
答案3
有点离题,但如果您只想将输出放入剪贴板以便将其粘贴到 Excel 中,则可以尝试使用 xclip 之类的工具。请注意,您可能必须安装它。使用 xclip 我可以写这样的东西。
echo -e "xx\t\tyy" | xclip -selection c
现在它位于我的剪贴板中,我可以将其粘贴到 Excel 中。如果 echo 不起作用,您可以尝试 printf 。
如果您不想每次都键入所有内容,则可以创建别名。
alias xclip="xclip -selection c"
echo -e "xx\t\tyy" | xclip
如果没有别的办法,您始终可以将所需的输出重定向到文件,然后在文本编辑器中打开它并复制您需要的内容,因为选项卡应保留为文件中的选项卡。
echo -e "xx\t\tyy" > tmpfile.txt