如何在命令行上显示文本文件的内容?

Sam*_*erg 216 command-line files cat

我想在命令行上显示文本文件的内容。该文件仅包含 5-6 个字符。是否有捷径可寻?

小智 301

使用 cat

由于您的文件很短,您可以使用 cat.

cat filename
Run Code Online (Sandbox Code Playgroud)

使用 less

如果您必须查看较长文件的内容,可以使用诸如 less.

less filename
Run Code Online (Sandbox Code Playgroud)

您可以使less行为类似于cat在小文件上调用时的行为,否则通过传递-F-X标志来正常行为。

less -FX filename
Run Code Online (Sandbox Code Playgroud)

我有一个别名less -FX。你可以像这样自己制作一个:

alias aliasname='less -FX'
Run Code Online (Sandbox Code Playgroud)

如果您将别名添加到您的shell 配置中,您就可以永远使用它。

使用 od

如果您的文件包含奇怪或无法打印的字符,您可以使用 od来检查这些字符。例如,

$ cat file
(ÐZ4 ?o=÷jï
$ od -c test
0000000 202 233   ( 320   K   j 357 024   J 017   h   Z   4 240   ?   o
0000020   = 367  \n
0000023
Run Code Online (Sandbox Code Playgroud)

  • +1,“sed -nl file”也可能有用。 (2认同)

小智 47

尽管每个人都使用cat filename打印文件中的文本到标准输出第一个目的是CONenating。从 cat 的手册页:

cat - 连接文件并在标准输出上打印

现在 cat 可以用于打印文件,但还有其他选择:

  echo "$(<filename)"
or
  printf "%s" "$(<filename)"
Run Code Online (Sandbox Code Playgroud)

所述( )的内容返回一个表达式的值,在这种情况下的文件名,然后由膨胀$echoprintf

更新:

< filename
Run Code Online (Sandbox Code Playgroud)

这正是您想要的,并且很容易记住。

下面是一个示例,它允许您在菜单中选择一个文件,然后将其打印出来。

#!/bin/bash

select fname in *;
do
# Don't forget the "" around the second part, else newlines won't be printed
  printf "%s" "$(<$fname)"
  break
done
Run Code Online (Sandbox Code Playgroud)

进一步阅读:
BashPitfalls - cat 文件 | sed s/foo/bar/ > 文件
Bash 参考 - 重定向

  • 裸露的 `&lt; filename` 不会显示文件的内容,但 `cat filename` 会显示。 (4认同)
  • 您的更新:“`&lt; filename` 正是您想要的,...”具有误导性。总的来说,虽然这是一个关于替代方案的有趣讨论,但我认为“cat”更简单。 (2认同)
  • 你也可以使用`tee &lt; filename`。 (2认同)
  • +1 为 `echo "$(&lt;filename)"` bashism。这里还不够。 (2认同)
  • `cat` 的主要用途是连接,但在所有可以转储文件内容的命令中,它是极少数不会在此过程中修改文件的命令之一。你的 `$(...)` 删除尾随的换行符,在 bash 中删除 NUL,如果有反斜杠或者以 `-` 开头,`echo` 会做进一步的修改。在 bash 中,仍然会分叉一个进程,并且内容必须通过管道输入并在内存中多次存储。确实不是对“cat file”的改进。 (2认同)

小智 15

在 unix 上处理文本文件的工具是基本的日常命令:

在 unix 和 linux 中打印出文件中的全部内容

cat filename.txt
Run Code Online (Sandbox Code Playgroud)

或者

more filename.txt
Run Code Online (Sandbox Code Playgroud)

或者

less filename.txt
Run Code Online (Sandbox Code Playgroud)

对于最后几行

tail filename.txt
Run Code Online (Sandbox Code Playgroud)

对于前几行

head filename.txt
Run Code Online (Sandbox Code Playgroud)


小智 10

您可以使用以下命令来显示文本文件的内容。

猫文件名 


Mic*_*ant 5

一种选择是使用 more

例如 more file.txt

但是,它没有添加的所有功能less
一个简单的例子是你不能在输出中向上滚动。通常它已被 less 取代 - 以开玩笑的方式命名是因为

少即是多