在终端窗口上输出制表符

在终端窗口上输出制表符

如何在终端窗口上输出制表符(ASCII 十六进制 0x09)?

在我的所有实验中,制表符出现在终端上时都会更改为空格。例如

$ echo -e "xx\t\tyy"
xx              yy

xx这不是我想要的,因为和之间的空格yy填充了 14 个空格而不是 2 个制表符。我尝试了stty tab0stty tab1stty tab2stty tab3,但都给出了相同的结果。

我使用的是 GNOME Terminal 2.16.0 和 Red Hat Enterprise Linux Client 版本 5.9。

背景:我想用鼠标选择终端上的文本并粘贴到 Excel 中。当我从 Emacs 中执行此操作(字段之间有 0x09 选项卡)时,字段最终位于不同的列中。我喜欢这个,并且希望从终端复制粘贴时有相同的行为。但是,目前所有字段最终都作为第一列中的一个字符串。当我在 Emacs 中的字段之间有空格 (0x20) 时,行为与从终端复制粘贴时的行为相同。

答案1

制表符不是可打印字符。 Tab 是一个控制字符,通常使光标前进(但不在行尾),而使其跳过的字符保持不变。

gnome-terminal(和其他vte基于 的模拟器)有一个特殊的技巧,它尝试保留选项卡以进行复制粘贴,但是,它仍然会在软换行时丢失它们。其他模拟器也可能有这样的黑客攻击,但通常不会。

另请参阅对话https://bugzilla.gnome.org/show_bug.cgi?id=769316

答案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

相关内容