当前位置:首页 > 文章 > 系统OS > 正文内容

Ubuntu初学教程,基本的命令(四)之管道符应用

myblog3个月前 (06-24)系统OS72

让我们从一个简单的问题开始。 

您的Combined.txt文件中有几行? wcword count)命令可以告诉我们,使用-l开关告诉我们,我们只需要行计数

wc -l combined.txt

同样,如果您想知道主目录中有多少文件和文件夹,然后自己整理,可以这样做:

ls ~ > file_list.txt
wc -l file_list.txt
rm file_list.txt

该方法虽然有效,但是创建一个临时文件来保存ls的输出仅在两行之后将其删除似乎有点多余。 幸运的是,Unix命令行提供了一种快捷方式,通过获取一个命令的输出(称为标准输出或STDOUT)并将其直接作为另一命令(标准输入或STDIN)的输入,从而避免了创建临时文件的麻烦。 )。 好像您已经在一个命令的输出和下一个命令的输入之间连接了一条管道一样,所以实际上此过程称为将数据从一个命令传递到另一个命令。 以下是将ls命令的输出通过管道传输到wc的方法:

ls ~ | wc -l

请注意,没有创建临时文件,也不需要文件名。 管道完全在内存中运行,并且如果您不指定要使用的文件,大多数Unix命令行工具都希望从管道接收输入。 在上面的行中,您可以看到它是两个命令,ls 〜(列出主目录的内容)和wc -l(对行进行计数),由竖线字符(“ |”)分隔。 这种将一个命令传递到另一个命令的过程非常普遍,以至于该字符本身通常被称为管道字符,因此,如果您看到该术语,您现在知道它只是表示竖线。

请注意,竖线字符周围的空格并不重要,为了清楚起见我们使用了空格,但是以下命令也可以使用,这次是告诉我们/etc目录中有多少项:

ls /etc|wc -l

如果我们想列出所有内容,那么显然它会填满一个屏幕。 正如我们先前所发现的,当命令产生大量输出时,最好使用less进行查看,并且该建议在使用管道时仍然适用(请记住,按q退出):

ls /etc | less

回到我们自己的文件,我们知道如何在combined.txt中获取行数,但是鉴于它是通过多次连接同一文件而创建的,我想知道有多少行唯一? Unix有一个命令uniq,它将仅在文件中输出唯一的行。 因此,我们需要cat文件并将其通过uniq传递。 但是我们只需要一个行数,因此我们也需要使用wc。 幸运的是,命令行不会一次将您限制在单个管道内,因此我们可以继续根据需要链接任意数量的命令:

cat combined.txt | uniq | wc -l

该行可能导致计数与文件中的总行数非常接近(即使不完全相同)。 肯定不对吗? 断开最后一个管道,以查看命令的输出,以更好地了解发生的情况。 如果您的文件很长,则可能希望通过less的管道进行传输,以使其更易于检查:

cat combined.txt | uniq | less

看起来很少有重复行被删除。 要了解原因,我们需要查看uniq命令的文档。 大多数命令行工具都附带一个简短的(有时不那么简短)的说明手册,可通过manmanual)命令进行访问。 输出会自动通过管道传送,通常用less,因此您可以在输出中来回移动,然后在完成时按q

man uniq

The man page for uniq

由于此类文档是通过man命令访问的,因此您会听到它被称为“手册页(man page)”,如“检查手册页以获取更多详细信息”中所述。手册页的格式通常很简洁,将它们更多地看作是命令的快速概述,而不是完整的教程。它们通常具有很高的技术水平,但是您通常可以跳过大部分内容,而只是查找所使用的选项或参数的详细信息。

uniq手册页是一个典型的示例,它以简单的单行命令描述开始,继续介绍如何使用该命令,然后详细介绍每个选项或参数。但是,尽管手册页非常宝贵,但它们也是不可渗透的。当您需要提醒特定的开关或参数时,最好使用它们,而不是作为学习如何使用命令行的常规资源。不过,man uniq的Description部分的第一行确实回答了以下问题:为何没有删除重复的行:它仅适用于相邻的匹配行。

那么,问题是如何重新排列我们文件中的行,以便重复的条目位于相邻的行上。如果我们按字母顺序对文件的内容进行排序,就可以做到这一点。Unix提供了一个sort(分类排序)命令来完成这个任务。对man sort快速检查表明,我们可以将文件名直接传递给命令,所以让我们看看它对我们的文件做了什么:

sort combined.txt | less

您应该可以看到这些行已重新排序,现在适合直接用管道输送到uniq。 我们最终可以完成计算文件中唯一行的任务:

sort combined.txt | uniq | wc -l

正如您所看到的,将数据从一个命令传输到另一个命令,建立长链来操作数据的能力是一个强大的工具,它减少了对临时文件的需求,并为您节省了大量的输入。由于这个原因,您将看到它经常在命令行中使用。一开始,一长串命令看起来很吓人,但请记住,您可以将最长的命令链分解为单个命令(并查看它们的手册页),以便更好地了解它正在做什么。


大多数Linux命令行工具--都包括手册页(man page)。试着简单地查看一下您已经遇到的一些命令的页面:man lsman cpman rmdir等等。甚至还有一个man程序本身的手册页,当然,它是使用man man访问的。


推荐阅读

Ubuntu初学教程,基本的命令(五)之超级用户和命令行

版权声明:本文由静水流深发布,如需转载请注明出处。

分享给朋友:

相关文章

简单的centOS7安装教程

简单的centOS7安装教程

欢迎来到李梦园个人博客---静水流深CentOS是一个基于RedHatEnterpriseLinux(RHEL)的开源Linux发行版.CentOS 7由于其稳定性和活跃的开发社区而被视为Web托管的...

Kali系统下载地址

Kali系统下载地址

阿里源下载...

Ubuntu初学教程,基本的命令(五)之超级用户和命令行

Ubuntu初学教程,基本的命令(五)之超级用户和命令行

超级用户,顾名思义,是一个拥有超能力的用户。在旧系统中,它是一个真正的用户,具有一个真实的用户名(几乎总是“root”),您可以像登录密码一样登录。至于这些超级功能:root可以修改或删除系统上任何目...

在Ubuntu上安装MongoDB社区版

在Ubuntu上安装MongoDB社区版

导入包管理系统使用的公钥。wget -qO - https://www.mongodb.org/static/pgp/server-4.2.asc | ...

Deepin更换国内软件源

Deepin更换国内软件源

使用root权限用户或者sudo编辑/etc/apt/sources.list在文件最前面添加以下条目deb [by-hash=force] http://mirrors.aliyun.com/dee...

Ubuntu安装和配置Samba

Ubuntu安装和配置Samba

1.安装Samba要安装Samba,我们运行以下命令:sudo apt update sudo apt install samba我们可以通过运行以...