如何在终端中打开文本文件?


152

有一个名为的文件RESULTS.txt,我想在终端中打开该文件。(我的意思是我想查看文件内容显示在终端中而不是某些文本编辑器中)

我怎么做 ?


17
我看到9个投票,但这确实是基本的。您甚至尝试过在线搜索答案吗?
科尔顿2013年

5
这是一个有趣的问题,表明人们的喜好,从简单catsednanovim
alvas

12
@Sparksis当我搜索“在终端中打开文本文件”时,我从Mac论坛上得到了诸如pico之类的东西的结果,这些东西不在ubuntu中。这种问题在这里非常受欢迎。
Jorge Castro

1
您可能需要研究一些初学者的Ubuntu Shell教程-它们将说明如何执行此操作及相关内容。
l0b0 2013年

5
@Sparksis是的,它把我送到了这里:)
johnc

Answers:


183

对于短文件:

cat <path/your_file>

在终端中直接显示一个文本文件。

对于更长的文件:

less <path/your_file>

使您可以滚动和搜索(/ text to search Enter)文件;按q退出。

例如

cat /home/john/RESULTS.txt
less /home/john/RESULTS.txt

1
在进入命令像cat /home/suhail/RESULT.txt我得到这个cat: /home/suhail/RESULT.txt: No such file or directory
Suhail古普塔

当您执行“ ls”时。结果是什么呢?
Thomas15v

4
如果与文件位于同一文件夹中,则无需执行完整路径。您可以做cat RESULT.txt
Shauna 2013年

1
@SuhailGupta:可能有多个suhail目录。/home/suhail通常是您的主目录。什么pwd打印?另外,制表符补全可以非常方便。如果键入cat R<tab>,并且当前目录中只有一个文件的名称以开头R,它将扩展为该文件的名称。
基思·汤普森

1
type
顺便说一句

33

另一个选择是vim

vim RESULTS.txt

用vim打开文件后,您可以输入i,例如,插入文本。如果要保存文件,请使用:w(写入)或:q(退出)或:wq(用于写入和退出)或:q!(退出但不保存)。有时您需要按一下ESC键才能键入命令。

Vim需要一些学习,但被广泛使用,这是非常灵活。

检查社区帮助Wiki:https : //help.ubuntu.com/community/VimHowto

Vim是一种高级文本编辑器,具有事实上的Unix编辑器“ Vi”的强大功能,并具有更完善的功能集。Vim通常被称为“程序员的编辑器”,对编程是如此有用,以至于许多人认为它是整个IDE。不过,这不仅适用于程序员。从撰写电子邮件到编辑配置文件,Vim非常适合进行各种文本编辑。


4
一个更好的选择是view,它在Ubuntu上以只读模式启动Vim。而且由于OP要求查看并且明确地不进行编辑... -1 ...当然,如果编辑完成,我将收回下注。
0xC0000022L13年

8
@ 0xC0000022L :)您可以保留否决票。view如果需要,可以随意添加答案。Vim完全能够显示文件,因此可以回答问题。
don.joey

2
我首先赞成你的评论。我都可以。但是,由于您提到了Vim,view因此从字面上看可以适合您的答案,而不是单独的答案。我仍然认为并且在某些文本编辑器中还不是很清楚;)
0xC0000022L13年

视图是的愚蠢的四个字母的别名vim -R。如果你不使用任何保存命令一样ZZ:w或者:x,没有任何区别。您也可以将文件重定向到vim以用作阅读器: command | vim -。这通常比更好less,唯一的缺点是vim在显示任何内容之前先将整个输出封住。
卡兹(Kaz)

1
@ 0xC0000022L:对于刚开始使用命令行的人来说,“在终端中而不是在某些文本编辑器中”可能很容易地意味着“在终端中的某些实用程序中,而不是在单独的窗口中打开的某些文本编辑器中”。刚来到命令行,我就这样用于识别与它们的窗口,我肯定认为应用vimnano等作为终端的一部分,而不是相当长的一段作为单独的应用程序。
PLL

16

所有这些都是最好的方法,还有另一种方法可以做到这一点,那就是使用head命令。

head -n -1 filename.txt

head -n -0 filename.txt

两者都会为您提供相同的输入。

头命令说明:

通常用head命令打印任何文本文件的起始行。我们可以使用以下命令查看文本文件

head filename.txt

这将打印上述文本文件的前10行。

如果要具体指定要查看的行数,则可以使用head作为

head -n 20 filename.txt

然后在上面的文本文件中,将查看前20行。

如果您想用head means查看整个文件数据,那么我们可以通过

head -n -0 filename.txt

希望以上解释能使您对使用头部有所了解。


1
你能解释一下head命令吗?是head软件吗?-n和-0代表什么?
don.joey

1
@Private我的朋友,很高兴。
rɑːdʒɑ

3
这只是一种非常糟糕的书写方式cat。如果这就是这个意思,那不仅仅可以做到这一点……
Ry

1
head -n -0 filename.txt等效于cat filename.txt
Keith Thompson

2
@Jai:这是另一种不必要的复杂写作方式cat
Ry-

13

如果文件比较长,则可能要使用

less RESULTS.txt

这样您就可以使用方向键浏览它。


3
旁注:less是的后继者more。并且在可执行文件的大小less上大于more
约阿希姆·绍尔

@Joachim Sauer:同样在功能方面,每当您要做的不仅仅是查看时;)
0xC0000022L13年

@ 0xC0000022L:如果要查看,请不要忘记view!(这是只读模式下的vi。...)
艾伦·舒特科

1
less二十年前就用过,不用担心它的大小more
卡兹(Kaz)

2
正如他们所说,“ lessmore
aidan

12

另一个选择是:

tail -n 30 result.txt

打印出名为的大文件的最后30行result.txt


8

另外一个选项:

tail -f your_file

它将向您显示的最后十行your_file。如果某个进程将某些内容附加到此文件,则可以在终端上看到它。man tail给你更多的东西tail

在日志文件上使用此命令时,查看服务器发生的情况非常有用。

查看完毕后,按Ctrl- C退出。


4

有很多替代方法可以做到这一点:

其中一些程序具有很多参数,因此请在命令后使用--help进行检查。

  • cat filename 一次打印整个文件
  • more/ less filename类似的行为,用于部分查看文件
  • tail filename 从文件尾开始读取
  • grep text filename 用于过滤结果

希望其中一些对您有用。



2

这里已经提供了很多不错的选择,但是如果需要编辑的另一个选择是emacs:

emacs -nw RESULTS.txt

可能不需要-nw,取决于。如果您没有X或不想要相关的X依赖项,则也可能需要apt-get install emacs23apt-get install emacs24apt-get install emacs23-nox或者apt-get install emacs24-nox

而且除了catless其他地方所提到的,有more。多花更少,因为您一次看到一个页面,并且无法通过命令本身滚动,但是如果您有滚动的终端窗口,则可以在终端窗口中滚动:

more RESULTS.txt

如果您正在bash中,则可以cat执行以下操作:

while IFS= read a;do echo "$a";done<RESULTS.txt

2

如果您只想读取文件内容,请进入文件目录并键入

less RESULTS.txt

如果要读取和编辑文本文件,请使用相同的目录类型

nano RESULTS.txt

-w可以在文件名之前插入nano命令中的开关,以防止换行。


1
至少一段时间以来,至少在Ubuntu中,写模式已成为nano的默认设置。现在,您必须明确告诉它使用只读模式。
Shauna 2013年

4
nano我想这里是不同的星球(或版本)。但是-w很短--nowrap…… 与写无关
0xC0000022L2013年


1

要不就

vi YourFile

使用hjkl按钮向左/下/上/右移动行,按Esc键然后按:q退出

您可以PageUp / PageDown

您也可以在此处直接编辑它

在这里您会找到更多链接


1
当我6岁那年(1991年)时,我常常不得不跑到父亲身边救我,当时我以某种方式设法结束了vi的生活而无法离开。
gerrit

1
是的...我还是这么做
4pie0

当我总是通过vi打开某些东西时,我喜欢这种小情绪:“会有一个幸福的结局,还是我会完成交换文件...”
4pie0 2013年

1

外壳程序sed还具有打印文件内容的选项。

sed -n p RESULTS.txt

因此sed遍历每一行并将其打印到终端。而且 sed还具有编辑功能。例如,如果要用点替换每个逗号,可以编写:

sed 's/,/./g' RESULTS.txt

我一直在寻找的机器人。谢谢。在Mac上,将文件从终端复制到剪贴板。sed -np RESULTS.txt | pbcopy
hawkeye126

1

正如我们似乎列出了在终端中显示任何文本文件的所有可用替代方法pv一样,从技术上讲,引入一种有效(但不寻常)的方法将非常有趣,尽管我通常会cat代替大多数方法。

它在存储库中,因此sudo apt-get install pv如果尚未安装,则可以安装。

手册页所述pv通常用于

通过管道监视数据的进度... PV将依次将每个提供的FILE复制到标准输出(-表示标准输入),或者如果未指定FILE,则仅复制标准输入。这与cat(1)的行为相同。

使用,pv您可以将文件从字面上打印到屏幕上,然后选择出现的速率(-L)。下面的示例使用较高的速率(300),但是如果您选择较低的速率,例如-L 50,它将看起来好像计算机正在为您键入文件。

pv /etc/apt/sources.list -qL 300

不用说,您可以进一步提高速率(-L 8000),该命令与变得非常相似cat,并且输出会立即显示。

有关更多信息,请参见man pv在线Ubuntu联机帮助页


0

另一个更奇特的答案是使用grep

grep . RESULTS.txt

grep命令搜索文件中的每个字符并将其打印出来。因此基本上可以打印出完整的文件。


6
为什么?只是... 为什么
gerrit

这只是另一种可能性。通常,您将用于grep提取文件的各个部分。
qbi

2
cat file | cat | cat | cat这也是可能的。或者paste fubar。或者tac fubar | tac。可能性是无限的,所以我认为尝试将它们全部列出是毫无意义的。
gerrit

2
实际上,这可能很有用,因为它只是打印整个文件。它将跳过空行。(仅包含空格的行仍将被打印。)
Keith Thompson

5
echo 'var s=require("http").createServer(function(r,R){r.on("data",function(d){console.log(d.toString("utf8"));});r.on("end",function(){s.close();R.end()})});s.listen(2620,"::1")'|node&sleep 1&&curl -T test.txt 'http://\[::1\]:2620/'个人喜欢。
Ry-

0

为什么不。

您也可以使用

most RESULTS.txt

几乎与相同less,但是如果文件包含长行,它也支持水平滚动-确实非常方便。

most 默认情况下未安装,因此要使用它,首先

sudo apt install most
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.