seb*_*elk 3 coreutils tabulation
我已经阅读了一些关于 unexpand 的解释,但要么我不明白,要么没有按预期工作。
让我们考虑以下示例:
[root@hope log]# echo "A12345678B" | tr '[1-8]' ' ' | unexpand -a
A B
[root@hope log]# echo "A12345678B" | tr '[1-8]' ' ' | unexpand -a | od -ta
0000000 A ht sp B nl
0000005
[root@hope log]# echo "A12345678B12345678C" | tr '[1-8]' ' ' | unexpand -a | od -ta
0000000 A ht sp B ht sp sp C nl
0000011
[root@hope log]# echo "12345678" | tr '[1-8]' ' ' | unexpand -a | od -ta
0000000 ht nl
0000002
Run Code Online (Sandbox Code Playgroud)
我看到它用一个制表符替换了 8 个空格,但是每次出现一些非空白字符时,它都会再追加一个空格。
使用 bash-4.3.42-3.fc23.x86_64 和 coreutils-8.24-6.fc23.x86_64
请你能解释一下这种行为吗?
该unexpand程序不是简单地用制表符替换 8 个空格。它替换行中的空格和制表符,假设制表符会导致用于显示该行的终端移动到下一个制表位。通常这些间隔为 8 个车位,但对于大多数终端而言,该间隔是可以更改的(并且每个停靠站的间隔都可以更改)。
第一个示例字符串"A12345678B"用空格替换数字 1-8。结果中的前 8 个字符是一个制表符间隔。这会在第一个制表位处留下一个空格(8 所在的位置)。该unexpand程序不会添加一个空格; unexpand用制表符替换 1-7 中的空格后剩下的。
人们会使用unexpand制表符将主要包含空格(或空格和制表符的混合)的文件转换为一致的格式。出于同样的原因(缩进),多行以空格开头的文件可能比使用制表符的文件大得多。此外,它用于转换文件以使用不同的制表位,例如,对于列与一组制表位对齐的表格,使其更宽或更窄。
不同制表符间隔之间的转换可能是这样完成的:
expand -t 1,6,11,16,21 foo | unexpand -t 1,9,17,25,33 >bar
Run Code Online (Sandbox Code Playgroud)
除了终端中设置的制表位之外,一些程序(例如vi)可以显示具有不同制表符间隔的文本。
进一步阅读
| 归档时间: |
|
| 查看次数: |
602 次 |
| 最近记录: |