Linux/Unix 中的管道、Grep 和排序命令及其示例

⚡ 智能摘要

Linux 和 Unix 中的 pipe、grep 和 sort 命令可以链接和过滤文本:pipe 将一个命令的输出传递给下一个命令,grep 搜索模式,sort 排列行,而 filters 则转换它们之间的数据。

  • 🔗 管: 管道符号 | 将一个命令的输出作为下一个命令的输入。
  • 📄 分页: cat 管道传输到 less、pg 或 more 时,会一次显示一个屏幕的长文件。
  • 🔍 grep: grep 命令用于在文件中搜索与字符串或模式匹配的行。
  • 🎚️ grep 选项: -v、-c、-n、-i 和 -l 等标志分别用于反转、计数、编号、忽略大小写和列出文件。
  • 🔤 分类: sort 命令对文件的行进行排序,-r、-n 和 -f 分别用于反向排序、按数字排序和不区分大小写排序。
  • 🧪 过滤器: grep、sort、awk、sed 和 wc 等过滤命令处理管道输入并生成输出。
  • 🤖 人工智能帮助: AI 助手和 GitHub Copilot 可以构建和解释管道、grep 和排序管道。

Linux 和 Unix 系统中 pipe、grep 和 sort 命令的示例

管道、grep 和 sort 是 Python 中最常用的工具之一。 Linux 命令行之所以重要,是因为它们可以将零散的命令连接成一个强大的工作流程。本页将通过示例解释每个命令行,然后展示过滤器如何将它们组合在一起。

Linux 中的管道是什么?

在 Linux 系统中,管道(pipe)命令允许你使用两个或多个命令,其中一个命令的输出作为下一个命令的输入。简而言之,每个进程的输出直接作为下一个进程的输入,就像一条管道。符号“|”表示管道。

管道可以让你同时连接两个或多个命令,并依次执行它们。你可以使用功能强大的命令,快速完成复杂的任务。

让我们通过一个例子来理解这一点。

当您使用“cat”命令查看跨越多页的文件时,提示符会快速跳转到文件的最后一页,而您看不到中间的内容。

为了避免这种情况,你可以将“cat”命令的输出通过管道传递给“less”命令,这样一次只会显示一个滚动长度的内容。

cat filename | less

图示会更清晰。下图展示了管道如何将一个命令的输出传递给下一个命令。

Linux管道示意图,展示了如何将一个命令的输出作为下一个命令的输入。

‘pg’ 和 ‘more’ 命令

除了“less”之外,您还可以使用 pg 或 more 命令:

cat Filename | pg

or

cat Filename | more

然后,您可以将文件分段查看,只需按回车键即可向下滚动。下面的屏幕截图显示了使用 more 命令分页显示的文件。

通过管道将 cat 命令传递给 more 命令,每次分页显示一个屏幕的长文件。

‘grep’ 命令

假设你想在文本文件中查找特定信息,例如邮政编码。

您可以自行手动浏览内容。 trac收集信息。更好的选择是使用…… grep的 该命令会扫描文档以获取所需信息,并以您所需的格式呈现结果。

语法:

grep search_string

让我们看看实际效果。下面的屏幕截图显示了搜索结果。

使用 grep 命令在示例文件中搜索字符串“Apple”和“Eat”。

这里,grep 命令在文件“sample”中搜索字符串“Apple”和“Eat”。该命令可以使用以下选项。

附加选项 功能
-v 显示所有与搜索字符串不匹配的行
-c 仅显示匹配行数
-n 显示匹配的行及其编号
-i 匹配大小写字母
-l 仅显示带有字符串的文件名称

让我们对上面使用的同一个文件尝试使用“-i”选项。下面的屏幕截图显示了不区分大小写的结果。

grep -i 执行不区分大小写的字母 a 搜索

使用“-i”选项,grep 从所有行中过滤掉了字符串“a”(不区分大小写)。

‘sort’ 命令

此命令有助于按字母顺序对文件内容进行排序。

此命令的语法是:

sort Filename

请看下面用 cat 表示的文件内容。

cat 命令显示文件 abc 的未分类内容。

运行排序命令会将这些行按字母顺序排列,如下所示。

sort 命令按字母顺序排列文件 abc 的内容

该命令还有一些扩展命令,它们列在下面。

附加选项 功能
-r Reverse排序
-n 按数字排序
-f 不区分大小写的排序

下面的例子显示对文件‘abc’中的内容进行反向排序。

sort -r 命令对文件 abc 的内容进行反向排序。

什么是过滤器?

Linux 有很多过滤命令,例如 awk、grep、sed、spell 和 wc。过滤器接收来自某个命令的输入,进行一些处理,然后给出输出。

当您使用管道连接两个命令时,第一个命令的“过滤”输出会传递给下一个命令。下图展示了过滤器如何在管道中发挥作用。

Linux 过滤器示意图,该过滤器接收管道输入,对其进行处理,并产生输出。

让我们通过一个例子来理解这一点。我们有一个名为“sample”的文件,如下所示(使用 cat 命令)。

cat 命令显示过滤前样本文件的内容

我们只想高亮显示不包含字符“a”的行,但结果顺序要相反。为此,可以使用以下语法:

cat sample | grep -v a | sort -r

让我们来看一下结果,如下截图所示。

使用 `cat` 命令通过 `grep -v` 和 `sort -r` 命令进行反向排序,得到不包含字母 a 的行。

常见问题

管道符(|)将一个命令的输出直接传递给另一个命令,从而将它们链接在一起。重定向符(> 和 <)则将命令连接到文件,将输出写入文件或从文件读取输入。管道符连接命令;重定向符连接命令和文件。

grep 是 Global Regular Expression Print(全局正则表达式打印)的缩写。它会逐行扫描文件或输入,并打印出所有与你指定的模式匹配的行。它的名称来源于旧版 ed 编辑器的命令 g/re/p,该命令执行相同的搜索操作。

sort 命令有一个 -u 选项,可以一步完成排序和删除重复行的操作:sort -u file。你也可以将 sort 命令的输出通过管道传递给 uniq 命令,例如 sort file | uniq,因为 uniq 命令只会删除相邻的重复行。

使用重定向结束管道:`cat sample | grep -va | sort -r > result.txt` 会将最终输出写入文件。要同时在屏幕上查看输出并保存,请改用管道将其传递给 `tee` 命令。

grep 命令在文件中搜索与特定文本模式匹配的行。find 命令则根据名称、大小、类型或日期查找文件和目录本身。简而言之,grep 查看文件内容,而 find 则在目录树中查找文件。

tee 命令从管道读取数据,并同时将数据写入屏幕和一个或多个文件,例如 grep error log | tee errors.txt。它允许你在不中断管道的情况下保存中间输出。

AI助手可以根据简单的英语请求建议正确的管道命令链,解释不熟悉的grep或sort标志,并识别管道中的错误。机器学习工具还会扫描管道日志输出,标记人工过滤会遗漏的异常情况。

是的。 GitHub 副驾驶 可以根据描述您需求的简短注释生成结合 cat、grep 和 sort 的管道,并在您键入时完成命令。 Rev使用示例数据查看任何建议的管道,特别是重新排序或删除行的选项。

总结一下这篇文章: