如何在终端中禁用换行?

nun*_*axe 65 terminal

我需要使用 bash shell 查看大型日志文件。我是less用来打开文件的,但是由于行太长,所以正在进行某种换行/自动换行。

由于文件是Log4J日志,而且每一行的开头都有一个模式,换行后很难分析输出,所以我开始使用less -Swhich 砍长行。

但是现在我需要使用tail -f,并且它还会对输出进行换行。是否可以在 bash shell 中为所有命令禁用换行?

注意:有一个提到转义序列的不同问题的答案echo -ne '\e[?7l',但它似乎不适用于 bash。

小智 68

尝试:

less -S +F filename
Run Code Online (Sandbox Code Playgroud)

=

less --chop-long-lines +F filename
Run Code Online (Sandbox Code Playgroud)

进而:

  • Ctrlc停止拖尾,现在您可以使用光标键左右移动。
  • 按下Shiftf可恢复拖尾
  • Ctrlc,q退出

less manual: + 如果命令行选项以 + 开头,则该选项的其余部分将被视为 less 的初始命令。

例如,+F告诉less向前滚动,并在到达文件末尾时继续尝试阅读


Yur*_*sev 33

从 superuser找到了一个很好的答案,它开箱即用gnome-terminal,可能也适用于其他终端:

setterm -linewrap off
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

  • 那我该如何水平滚动呢? (7认同)

enz*_*tib 18

假设你COLUMNS定义了变量,你可以执行

tail -f your-app.log | cut -c -$COLUMNS
Run Code Online (Sandbox Code Playgroud)

否则$COLUMNS用终端的列宽替换,如通过 获得stty -a

  • 旁注:cut 仅计算字节;与“less -S”不同,它会搞砸彩色文本或任何带有 ANSI 转义的内容。也可能会搞砸 Unicode。 (3认同)
  • `$COLUMNS`(不会在 `SIGWINCH` 上立即更新,仅在下一个提示时)和 `stty -a`(更难在脚本中使用)的另一个替代方案是 `tput cols`。 (2认同)

Win*_*nix 11

您可以禁用自动换行lesstail并在Linux与阳光下的所有其他命令:

tput rmam
Run Code Online (Sandbox Code Playgroud)

要恢复换行使用:

tput smam
Run Code Online (Sandbox Code Playgroud)


jw0*_*013 10

你真的需要tail -fless +F想做类似的事情吗?由于听起来您仍然想要一个交互式寻呼机,在我看来,坚持使用less比自己重新实现一个要容易得多。

最后一点:你考虑过tail -f file | less吗?


d-b*_*d-b 7

这里有两个很好的答案/例子

http://www.commandlinefu.com/commands/view/1710/tail-a-log-file-with-long-lines-truncated

tail -f logfile.log | cut -b 1-80

tail -f logfile.log | cut -b -$(tput cols)
Run Code Online (Sandbox Code Playgroud)

一个警告:至少在我的 Mac 上的内置终端上,cut 似乎不能很好地处理制表符。它似乎用例如 8 个空格显示它们,但只是将它们计算为 4 个空格宽或类似的东西。换句话说,如果您的终端有 80 个字符宽,并且您的输出每行包含多个制表符,您必须将宽度设置为 60 或类似的值。天啊。