“猫”的作用是什么?


14

我已经看到cat命令出现在一些在线内容中,我很好奇cat在有人只是在做一些简单的命令行内容的情况下它做了什么以及它的用途。

Answers:


12

cat的主要目的是骗子 enate文件。cat file1 file2 ...会显示的内容filefile2然后依次显示其他内容,就像这些内容在一个文件中一样。参见手册

NAME
       cat - concatenate and print files

它用于以下情况之一:

  • 目标命令无法从文件读取,您需要将多个文件传递给它。该tr实用程序就是一个例子。通常,使用一个文件,您可以执行以下操作:

    tr < file
    

    但是对于多个文件,无法使用重定向,因此您必须执行以下操作:

    cat file1 file2 ... | tr
    
  • 目标命令可以读取多个文件,但是当给定多个文件时,其行为可能会发生变化。一个示例是wc,它显示每个文件的计数以及文件名,而您可能只希望总数而不包含文件名。

记住,你遇到的大多数命令(grepsedawksort,...),可以完全正常的读取文件。

如果你想查看一个文件的内容,使用寻呼机 - less并且more都突出地能够呈现文件进行查看,并且是更加方便使用。


重定向可以很好地与多个文件一起使用,因为您可以将其与流程和命令替换结合使用:< <(cat file[12]) tr以及<<<$(cat file[12]) tr两种完全有效的重定向多个文件的方法。当然,您也需cat要这样做,只是管道并不是唯一的方法。
甜点

@dessert,如果您必须要学究,则重定向仍仅使用一个文件-该文件表示命令的stdout(或者stdin,反之亦然)。Bash不像zsh那样支持真正的多文件重定向。
muru

9

cat是类Unix操作系统上最常用的命令之一。它具有与文本文件有关的三个相关功能:

  1. 显示它们
  2. 合并它们的副本
  3. 创建新的。
  4. 复制档案

cat的一般语法为:

cat [options] [filenames] [-] [filenames]

读取文件

cat的最常见用法是读取文件的内容,而cat常常是用于此目的的最方便的程序。打开文本文件以在显示监视器上查看所需的所有操作是,键入单词cat,后跟一个空格和文件名,然后按Enter键。例如,以下将显示名为file1的文件的内容:

cat file1

级联

猫的第二个作用是串联。(这是cat好奇名称的来源。)对原始文件没有影响。

例如,以下命令将连接三个文件file1,file2和file3的内容的副本:

cat file1 file2 file3

每个文件的内容将显示在监视器屏幕上。使用输出重定向操作符可以很容易地使用以下命令将输出重定向到另一个文件,例如file4:

cat file1 file2 file3 > file4

文件创建

感谢@muru comment:cat能够根据shell重定向功能而不是本身来创建新文件

对于小文件,这通常比使用vi,gedit或其他文本编辑器容易。通过键入cat,后跟输出重定向操作符和要创建的文件的名称,然后按ENTER,最后同时按Ctrld键,可以完成此操作。

例如,可以通过键入以下内容来创建名为file1的新文件

cat > file1

然后按ENTER,同时按Ctrld键。

PS1:如果已经存在一个名为file1的文件,它将被覆盖

PS2:您可以使用附加运算符>>示例cat >> file1 附加到退出的文件

复制文件

也可以使用cat命令(取决于 shell重定向功能)来创建一个新文件,并将现有文件中的数据传输到该文件。示例:复制文件oldfile.txt

cat oldfile.txt > newfile.txt

参考文献:


1
回复3:cat没有创建这些文件-使用重定向时使用的是shell。您可能做得还不错echo foo > file1
muru

@muru你是完全正确的,但仍然使用cat命令
Maythux

1
不,不是。您是在归因于其他cat事物的实际作用。例如,执行less file1 > file2(或grep '.*' file1 > fileawk 1 file1 > file2或...)具有相同的效果。同上4。这些只是滥用。
muru

我知道我可以使用它> file并给出相同的结果,但是我不能认为用cat这样做是有效的吗?
Maythux

1
如果指定cat不创建文件,可以。说cat创建或复制文件只是错误的。
muru

1

它可以用来显示文件的内容。例如:cat "my file.txt"。您也可以man cat向您显示cat可以使用的详细信息。


0

这是使用Shell重定向(或管道)和创建文件的另一种方法cat

cat << EOF > foo.sh
#!/bin/sh
echo 'Hello World!'
EOF

cat << EOF将输出以下行,直到EOF再次遇到该字符串为止。然后>>>)将输出重定向到文件foo.sh。另外,如果您需要以root用户身份创建文件,则可以将输出通过管道传递到命令teetee -a),该命令由以下命令执行sudo

cat << EOF | sudo tee foo.sh && sudo chmod +x foo.sh
#!/bin/sh
HELLO='Hello World!'
echo "\$HELLO"
EOF
  • chmod +x如果成功创建(&&),以上方法将使该文件可执行()。
  • 某些字符(as $)的特殊含义应\在的输出中转义(带有)cat
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.