【发布时间】:2009-10-23 23:20:14
【问题描述】:
在 *nix 中,我如何显示(cat)一个没有换行的文件:较长的行应该被剪掉以适应屏幕的宽度。
【问题讨论】:
在 *nix 中,我如何显示(cat)一个没有换行的文件:较长的行应该被剪掉以适应屏幕的宽度。
【问题讨论】:
您可能正在寻找fmt:
fmt file
这会非常激进地重新格式化您的文本,因此它可能会比您想要的更多。
或者,cut 命令可以将文本剪切到特定的列宽,丢弃超出右边距的文本:
cat file | cut -c1-80
另一个方便的选项是less -S 命令,它在全屏窗口中显示文件,长行左右滚动:
less -S file
【讨论】:
$COLUMNS:试试cut -c1-$COLUMNS file
less 运行时使用组合键-S 切换换行
在 less 中切换长换行。默认是换行。
- `less file`
- in file type `"-S"` to toggle to truncate on line width
- to toggle back `"-S"` again.
【讨论】:
-S 作为选项调用less:less -S file 或将其包含在您的环境中:export LESS="-S"(以及其他选项)。无论哪种情况,如果您愿意,您仍然可以在它运行后使用切换。
请注意,cut 接受文件名作为参数。
这似乎对我有用:
watch 'bash -c "cut -c -$COLUMNS file"'
为了测试,我加了一个右边距:
watch 'bash -c "cut -c -$(($COLUMNS-10)) file"'
当我调整终端大小时,截断已更新为匹配。
【讨论】:
watch ./colscript 时,我看到显示 80。当我通过拖动窗口的边缘(我正在使用 PuTTY)更改宽度时,数字会更改以匹配。你看到了什么?
echo $BASH_VERSION 给我“3.2.48(1)-release” 从命令行运行./colscript 会回显空白行的原因是$COLUMNS 仅用于交互式shell。您可以尝试在./colscript 的第一行末尾添加-i,这样您就有了#!/bin/bash -i
正如其他人所说,答案是cut -c ...,但要为其添加一些动态,我更喜欢这个:
cat file.txt |cut -c -$(tput cols)
【讨论】:
cut 的使用没有考虑到制表符被视为单个字符\t,但它们被打印为 8 个空格。因此,带有标签的文件将在不同的感知列处被剪切。
less -S 以最佳方式截断文本,即使存在制表符,但 AFAIK 它不能用于非交互式打印“切碎”文件。
一个可行的解决方案是通过expand 将制表符转换为空格,然后通过cut 输出:
expand < file | cut -c -$(tput cols)
【讨论】:
expand 有很大帮助;谢谢,我只是在努力解决这个问题(使用标签)。很高兴我滚动到底部!