在 Linux / UNIX 中管理文件的 Cat 命令示例
Cat 命令是您在 Unix / Linux 世界开始时学到的基本命令之一。
您已经知道 cat 显示文件内容。这个命令还能做什么?
本文给出了 cat 命令的 10 个实际使用示例。这些例子中可能很少有你不熟悉的。或者,如果您已经知道这些示例,它可以让你重新复习。
1.显示文件内容
当您将文件名作为参数传递给 cat 时,它会显示文件的内容,如下所示。
$ cat program.pl
#!/usr/bin/perl
if( 2 ge 3) {
print "greater\n";
}else {
print "lesser\n";
}
您还可以显示多个文件的内容,如下所示。
$ cat program.pl program2.pl
#!/usr/bin/perl
if( 2 ge 3) {
print "greater\n";
}else {
print "lesser\n";
}
#!/usr/bin/perl
@arr = qw(1 2 3);
$ref = \@arr;
print ref $ref;
2.创建一个新文件
使用 cat 命令,从标准输入接收的行可以使用重定向符号重定向到新文件。
当您只键入不带任何参数的 cat 命令时,它只会接收标准输入内容并将其显示在标准输出中。因此,在键入该行一次后,当您按下回车键时,同一行将打印在下一行中,如下所示。
$ cat
cat command for file oriented operations.
cat command for file oriented operations.
cp command for copy files or directories.
cp command for copy files or directories.
您还可以将标准输出重定向到新文件,如下所示。
$ cat >cmd_usage.txt
cat command for file oriented operations.
cp command for copy files or directories.
$ cat cmd_usage.txt
cat command for file oriented operations.
cp command for copy files or directories.
有时您可能需要将内容附加到文件中,请使用 >> 重定向符号,如下所示。
$ cat >>cmd_usage.txt
ls command to list out file and directory with its attributes.
$ cat cmd_usage.txt
cat command for file oriented operations.
cp command for copy files or directories.
ls command to list out file and directory with its attributes.
3.复制文件内容
unix 中的重定向符号在处理标准文件描述符内容中起着重要作用。使用它,您可以将一个文件的内容复制到另一个文件中,如下所示。
$ cat program.pl >backup_prgm.pl
如上所示,由于我们使用了输出重定向,标准输出中显示的内容被定向到一个名为 backup_pgrm.pl 的新文件中。查看backup_pgrm.pl的内容:
$ cat backup_pgrm.pl
#!/usr/bin/perl
if( 2 ge 3) {
print "greater\n";
}else {
print "lesser\n";
}
4. 连接多个文件的内容
通过 cat 命令,您将能够将多个文件的内容连接到一个新文件中。
例如,program.pl 和 program2.pl 中的代码组合成一个新文件 all_pgrm.pl。
$ cat program.pl program2.pl >all_pgrm.pl
如上所示,stdout 被重定向,并且新文件已使用 program.pl 和 program2.pl 的内容创建。验证 all_pgrm.pl 的内容:
$ cat all_pgrm.pl
#!/usr/bin/perl
if( 2 ge 3) {
print "greater\n";
}else {
print "lesser\n";
}
#!/usr/bin/perl
@arr = qw(1 2 3);
$ref = \@arr;
print ref $ref;
5.显示行号
要显示每行前面带有行号的文件的内容,请使用选项 -n。以下示例打印来自 program.pl 的行的行号,
$ cat -n program.pl
1 #!/usr/bin/perl
2
3
4 if( 2 ge 3) {
5 print "greater\n";
6 } else {
7 print "lesser\n";
8 }
9
10
正如您在上面注意到的,即使是空行也有编号。如果仅对非空行进行编号,请使用选项 -b,如下所示,
$ cat -b program.pl
1 #!/usr/bin/perl
2
3 if( 2 ge 3) {
4 print "greater\n";
5 } else {
6 print "lesser\n";
7 }
请注意,包含空格的行不被视为空行,同样适用于编号为 2 的行。
6. 将文件内容与来自标准输入的输入连接起来
可以从标准输入读取行以及连接其他文件。因此,用户可以在需要时键入他自己的内容。
在以下示例中,您可以在将文件组合在一起时在开头插入几行(来自标准输入)。
$ cat - program.pl program2.pl >all_pgrm.pl
Contents from file : program.pl, program2.pl
如上所示,- 是您可以从标准输入读取的位置,因此标准输入的 1 行已插入到名为 all_pgrm.pl 的新文件的开头,后者的内容来自 program.pl 和 program2.pl 文件:
$ cat -n all_pgrm.pl
1 Contents from file : program.pl, program2.pl
2 #!/usr/bin/perl
3
4
5 if( 2 ge 3) {
6 print "greater\n";
7 } else {
8 print "lesser\n";
9 }
10
11
12 #!/usr/bin/perl
13
14 @arr = qw(1 2 3);
15 $ref = \@arr;
16 print ref $ref;
7. 不要显示重复的空输出行
有时该文件会包含重复的空行,您不想在列出它时在标准输出中显示这些空行。cat 命令提供了一个名为 -s 的选项,它将连续的空输出行压缩为一个并显示。
正如在用法 5 的第一个示例中所注意到的那样(即:在每行前面显示行号),文件 program.pl 中有两个连续的空输出行,编号为 9 和 10。可能是您不想显示那些重复的空输出行。这可以被抑制,如下所示:
# cat -sn program.pl
1 #!/usr/bin/perl
2
3
4 if( 2 ge 3) {
5 print "greater\n";
6 } else {
7 print "lesser\n";
8 }
9
在上述输出中,第 9 行和第 10 行分别被压缩为一个空行(即:第 9 行)。
8.显示行尾和TAB字符
您可以让 cat 在每一行的末尾显示 $ 字符。通常通过列出文件内容,用户无法通过使用 cat -e 选项识别每行末尾的空格。
例如,对文件 program.pl 使用 -e 选项。如下所示,该文件的第三行(即:program.pl)实际上不是空行,并且第 7 行也分别以空格结尾。
$ cat -ne program.pl
1 #!/usr/bin/perl$
2 $
3 $
4 if( 2 ge 3) {$
5 print "greater\n";$
6 } else {$
7 print "lesser\n"; $
8 }$
9 $
10 $
使用选项 -T 显示制表符。它为 TAB 字符显示 ^I。如下所示,第 5 行和第 7 行以 TAB 字符开头。
$ cat -neT program.pl
1 #!/usr/bin/perl$
2 $
3 $
4 if( 2 ge 3) {$
5 ^Iprint "greater\n";$
6 } else {$
7 ^Iprint "lesser\n"; $
8 }$
9 $
10 $
9. 阅读内容直到特定模式
这里的文档可以与 cat 命令一起使用。例如,当您从标准输入读取时,您可以一直读取到包含特定模式的行。在下面的示例中,从标准输入(直到 EOF)读取行块并打印在标准输出上。
$ cat <<EOF
> mv command to move files and directories
> top command to display linux tasks
> EOF
mv command to move files and directories
top command to display linux tasks
10. 反向显示文件内容
这个例子是骗子。这真的不是 cat 命令示例,但它是相关的。
tac 是 cat 的反义词。可以想象,tac 只会以相反的顺序显示文件的内容(首先显示底部的行)。如果您只想反转行中的字符,则应使用rev 命令。
例如,文件 program.pl 被反向显示为:
$ tac program.pl
}
print "lesser\n";
} else {
print "greater\n";
if( 2 ge 3) {
#!/usr/bin/perl
- 点赞
- 收藏
- 关注作者
评论(0)