我需要使用 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)
进而:
less manual:
+如果命令行选项以 + 开头,则该选项的其余部分将被视为 less 的初始命令。
例如,+F告诉less向前滚动,并在到达文件末尾时继续尝试阅读
Yur*_*sev 33
从 superuser找到了一个很好的答案,它开箱即用gnome-terminal,可能也适用于其他终端:
setterm -linewrap off
Run Code Online (Sandbox Code Playgroud)
enz*_*tib 18
假设你COLUMNS定义了变量,你可以执行
tail -f your-app.log | cut -c -$COLUMNS
Run Code Online (Sandbox Code Playgroud)
否则$COLUMNS用终端的列宽替换,如通过 获得stty -a。
Win*_*nix 11
您可以禁用自动换行less,tail并在Linux与阳光下的所有其他命令:
tput rmam
Run Code Online (Sandbox Code Playgroud)
要恢复换行使用:
tput smam
Run Code Online (Sandbox Code Playgroud)
jw0*_*013 10
你真的需要tail -f或less +F想做类似的事情吗?由于听起来您仍然想要一个交互式寻呼机,在我看来,坚持使用less比自己重新实现一个要容易得多。
最后一点:你考虑过tail -f file | less吗?
这里有两个很好的答案/例子
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 或类似的值。天啊。