我已通过管道将命令发送到less
,现在我想将该命令的输出保存到文件中。我怎么做?
在这种情况下,我不想使用tee
,我想要直接从 less 获得解决方案,这样如果我忘记使用 ,我就不必重新运行长时间运行的命令tee
。
这个问题与这个问题类似,唯一的区别是我想保存所有行,而不是子集:从 less 将行写入文件
答案1
从 中less
,键入s,然后键入要保存到的文件名,然后键入Enter。
从man
页面中,在COMMANDS
:
s filename
Save the input to a file. This only works if the input is a pipe, not an ordinary file.
man
页面还指出,根据您的特定安装,该s
命令可能不可用。在这种情况下,您可以使用以下命令转到第 1 行:
g or < or ESC-<
Go to line N in the file, default 1 (beginning of file).
并将整个内容通过管道传输到cat
:
| <m> shell-command
<m> represents any mark letter. Pipes a section of the input file to the
given shell command. The section of the file to be piped is between the
first line on the current screen and the position marked by the letter.
<m> may also be ^ or $ to indicate beginning or end of file respectively.
所以要么:
g|$cat > filename
或者:
<|$cat > filename
即输入g或<(G或者少于) | $(管道然后美元) 然后cat > filename
和Enter.
无论输入是管道还是普通文件,这都应该有效。
答案2
一种无需这样做的方法tee
如下。如果
less /path/to/input > /path/to/output
上面的/path/to/output
内容已经存在,则会覆盖它。
执行相同的操作,但附加/path/to/output
如下。要在打开文本后
less /path/to/input >> /path/to/output
保存文本,可以使用“保存文件”功能。 进入后,按。然后,键入文件名。 如果您使用管道,该文件将自动写入工作目录。 如果您没有使用管道,您将打开一个包含文本的文件(您可以保存该文本)。 我相信该文件将以.less
less
s
vim
答案3
你不使用 less,而是使用 tee,然后通过管道将 tee 连接到 less。
./program | tee program.out | less