Linux 命令行—— I/O 重定向之cat、sort、uniq、sort、grep、wc、head、tail

I/O重定向

      • I/O 重定向

本文摘录自 Linux 命令行

I/O 重定向

你可以对文件进行命令的输入输出重定向,或是将多个命令连接起来流式使用。以下是一些命令:

命令 含义
cat 连接文件
sort 文本行排序
uniq 报告或省略重复行
grep 以匹配的模式打印
wc 打印文件中的换行符、单词和字节的数量
head 输出文件的第一部分
tail 输出文件的最后一部分
tee 从标准输入流中读取,并写出到标准输出流和文件中

到目前为止,我们用到的很多程序都会产生某种输出,这种输出,经常由两种类型组成。一:程序运行结果;二:我们得到状态和错误信息。

与Unix 主题“任何东西都是一个文件“的宗旨保持一致,有些程序将它们的运行结果输送到一个叫标准输出的特殊文件(stdout),而它们的状态信息则送到另一个叫标准错误输出的文件(stderr)。默认情况下,标准输出和标准错误输出都连接到屏幕,而不是保存到磁盘文件。对照的,标准输入从键盘得到输入。

  1. 标准输出重定向:I/O 重定向会允许我们更改输出地点和输入来源。我们使用 >重定向符后接文件名将标准输出重定向到除屏幕外的另一个文件。如:ls -l /usr/local/redis/ > ls-output.txt 这段命令会在当前目录下创建 ls-output.txt 文件,并将输出重定向到其中。若指定的目录不存在,就会在屏幕上看到报错:ls: /usr/local/db: No such file or directory ,并且文件也被清空了。为什么它没有重定向到文件去呢?这是因为它属于 stderr 文件,我们的>只重定向了标准输出stdout,且重定向时总是从开头重写。怎样才可以把重定向结果追加到文件内容后面呢?我们可以使用>>ls -l /usr/local/db >> ls-output.txt
  2. 标准错误输出重定向:标准输入、标准输出和标准错误输出在 shell 内部称为文件描述符 0、1 和 2。重定向标准错误输出:ls -l /usr/local/db 2> ls-output.txt
  3. 前面单独说了重定向标准输出和标准错误输出,那如何将它们同时输出到一个文件中去呢?那就必须同时重定向 stdout 和 stderr。有两个方法:
    1. 旧方法:ls -l /usr/local/redis/ > ls-output.txt 2>&1
    2. 新方法: ls -l /usr/local/redis/ &> ls-output.txt
  4. 处理不需要的输出:丢掉你不想要的输出:ls -l /usr/local/redis/ &> /dev/null /dev/null 是一个 Unix 的古老概念,就是直接抛弃
  5. cat - 连接文件:cat 命令读取一个或多个文件,然后复制它们到标准输出而没有分页:cat ls-output.txt 将会显示文件所有内容,所以 cat 经常用来显示简短的文本。除此之外,cat 可以接受不止一个文件作为参数,所以它也可以用来把文件连接在一起。比如下载了一个大型文件,它被分为多个小文件,你得把它们连接起来:cat movie.mpep.* > movie.mpep
  6. 管道线:|管道操作符,可以将一个命令的标准输出送至另一个命令的标准输入。我们所知道的一个命令接受标准输入:less,我们用它来一页一页显示任何命令的输出,并将其送至标准输出:ls -l /usr/local/redis/ | less 使用 |我们可以很方便的检查 任意命令的输出结果。
  7. 过滤器:管道线经常用来对数据完成复杂的操作。有可能会把几个命令拼接在一起组成一个管道。以这种方式的命令叫过滤器。先试试 sort:ls /usr/ /usr/local/redis/src |sort| less 它会把两个目录的内容合并到一起,再把它们排序。
  8. uniq:忽略重复。uniq 命令常和 sort 命令一起使用:ls /usr/ /usr/local/redis/src |sort|uniq| less
  9. wc:行数、字数、字节数统计。
  10. grep:打印匹配行。grep 是个很强大的命令,用来匹配文件中的文本。比如:我们想要在程序中找到名字包含“zip”的所有文件:ls /usr/ /usr/local/redis/src |sort|uniq| grep zip grep 中有一些方便的选项:-i使得 grep 在执行搜索时忽略大小写;-v使得 grep 只打印不匹配的行。
  11. Head/tail:打印文件开头/结尾部分。有时候你不想要一个命令所有的输出,可能只需要前几行或后几行的输出内容。head 命令默认打印文件的前十行,而 tail 命令打印文件的后十行,可以通过-n 来调整:head -n 2 ls-output.txt 或 tail -n 7 ls-output.txt 它也可以用在管道中:ls /usr/ /usr/local/redis/src |sort|uniq| grep -i zip | tail -n 4
    1. tail有一个经常使用的选项允许你实时浏览文件。当观察日志文件的进程时这很有用,这可能会涉及到权限:tail -f /usr/local/redis/db/redislog.log

你可能感兴趣的:(linux,linux,服务器,unix)