`

Linux管道和过滤器

阅读更多
有时候,我们可以把两个命令连起来使用,一个命令的输出作为另一个命令的输入,这就叫做管道。为了建立管道,需要在两个命令之间使用竖线(|)连接。

管道是Linux进程之间一种重要的通信机制;除了管道,还有共享内存、消息队列、信号、套接字(socket) 等进程通信机制。

管道使用竖线(|)将两个命令隔开,竖线左边命令的输出就会作为竖线右边命令的输入。连续使用竖线表示第一个命令的输出会作为第二个命令的输入,第二个命令的输出又会作为第三个命令的输入,依此类推。

能够接受数据,过滤(处理或筛选)后再输出的工具,称为过滤器。
grep命令

grep 是一个强大的文本搜索工具,可以使用正则表达式,并返回匹配的行,语法为:
引用
$grep pattern file(s)
“grep”源于 ed(Linux的一个行文本编辑器)的 g/re/p 命令,g/re/p 是“globally search for a regular expression and print all lines containing it”的缩写,意思是使用正则表达式进行全局检索,并把匹配的行打印出来。

正则表达式是一个包含了若干特殊字符的字符串,每个字符都有特殊含义,可以用来匹配文本,更多信息请查看正则表达式教程。

grep 可以看做是一个过滤器,如果没有为 grep 指定要检索的文件,那么它会从标准输入设备(一般是键盘)读取;其他过滤器也是如此。

grep 命令最简单的使用就是检索包含固定字符的文本。

例如,在管道中使用 grep 命令,只允许包含指定字符的行输出到显示器:
引用
$ls -l | grep "Aug"
-rw-rw-rw-   1 john  doc     11008 Aug  6 14:10 ch02
-rw-rw-rw-   1 john  doc      8515 Aug  6 15:30 ch07
-rw-rw-r--   1 john  doc      2488 Aug 15 10:51 intro
-rw-rw-r--   1 carol doc      1605 Aug 23 07:35 macros
$

grep 命令有很多选项:
选项 说明
-v 反转查询,输出不匹配的行。例如,grep -v "test" demo.txt 将输出不包含"test"的行。
-n 输出匹配的行以及行号。
-l 输出匹配的行所在的文件名。
-c 输出匹配的总行数。
-i 不区分大小写进行匹配。
下面我们使用正则表达式来匹配这样的行:包含字符“carol”,然后包含任意数目(含零个)的其他字符,最后还要包含“Aug”。

使用 -i 选项进行不区分大小写的匹配:
引用
$ls -l | grep -i "carol.*aug"
-rw-rw-r--   1 carol doc      1605 Aug 23 07:35 macros
$
sort命令

sort 命令在 Linux 中非常有用,它将文件中的各行按字母或数进行排序。sort命令既可以从特定的文件,也可以从stdin获取输入。

例如,对 foot 文件的各行进行排序:
引用
$sort food
Afghani Cuisine
Bangkok Wok
Big Apple Deli
Isle of Java
Mandalay
Sushi and Sashimi
Sweet Tooth
Tio Pepe's Peppers
$
通过下面的选项可以控制排序规则:
选项 描述
-n 按照数字大小排序,例如,10会排在2后面;-n 选项会忽略空格或 tab缩进。
-r 降序排序。sort 默认是升序排序。
-f 不区分大小写。
+x 对第x列(从0开始)进行排序。
下面的例子通过管道将 ls、grep 和 sort 命令连起来使用,过滤包含“Aug”的行,并按照文件大小排序:
引用
$ls -l | grep "Aug" | sort +4n
-rw-rw-r--  1 carol doc      1605 Aug 23 07:35 macros
-rw-rw-r--  1 john  doc      2488 Aug 15 10:51 intro
-rw-rw-rw-  1 john  doc      8515 Aug  6 15:30 ch07
-rw-rw-rw-  1 john  doc     11008 Aug  6 14:10 ch02
$
上面的命令,对当前目录中八月份修改的文件按照大小排序;+4n 表示对第5列按照数字大小排序。
pg和more命令

如果文件内容过多,全部显示会很乱,可以使用 pg 和 more 命令分页显示,每次只显示一屏。

例如,通过管道,使用more命令显示目录中的文件:
引用
$ls -l | grep "Aug" | sort +4n | more
-rw-rw-r--  1 carol doc      1605 Aug 23 07:35 macros
-rw-rw-r--  1 john  doc      2488 Aug 15 10:51 intro
-rw-rw-rw-  1 john  doc      8515 Aug  6 15:30 ch07
-rw-rw-r--  1 john  doc     14827 Aug  9 12:40 ch03
.
.
.
-rw-rw-rw-  1 john  doc     16867 Aug  6 15:56 ch05
--More--(74%)
如上,一次只显示一屏文本,显示满后,停下来,并提示已显示全部内容的百分比,按空格键(space)可以查看下一屏,按 b 键可以查看上一屏。
分享到:
评论

相关推荐

    filter-canvas:管道和过滤器的图形化配置工具

    管道和过滤器配置工具 安装 下载并安装 。 有说明:。 编辑local.ini文件,该文件通常可以在以下路径之/etc/couchdb/local.ini找到: /etc/couchdb/local.ini或/opt/local/etc/couchdb/local.ini [httpd] bind_...

    LINUX处理文本命令

    文件排序, 通常用在管道中当过滤器来使用. 这个命令可以依据指定的关键字或指定的字符位置, 对文件行进行排序. 使用-m选项, 它将会合并预排序的输入文件. 想了解这个命令的全部参数请参考这个命令的info页. 二. ...

    vue通过过滤器实现数据格式化

    VUE的过滤器的实现参考了linux的shell命令的管道的实现原理:即上一个命令的输出,是下一个命令的输入。 所以过滤器可以串接使用:{{数据 | 过滤器A | 过滤器B}} 除了在插值表达式中可以使用过滤器,在后文中将要...

    Linux+Shell命令行及脚本编程实例详解-刘艳涛.mobi kindle版

    Linux及Linux Shell简介、初识Linux Shell、常用Shell(Bash)命令、Shell命令进阶、Shell编程基础、Shell的条件执行、Bash循环、Shell函数、正则表达式、脚本输入处理、Shell重定向、管道和过滤器、捕获、sed和awk...

    RED HAT LINUX 6大全

    本书内容翔实、涉及领域广泛,并且提供了详细的例子和大量的参考资料(包括书籍、电子文档和Internet站点),是一本学习、使用和管理Linux不可多得的好书。 目 录 译者序 前言 第一部分 Red Hat Linux的介绍与安装 ...

    vim编辑器中掌握输入输出重定向与管道命令的应用

    许多Linux命令具有过滤特性,即一条命令通过标准输入端口接收一个文件中的数据,命令执行后产生的结果数据又通过标准输出端口送给后一条命令,作为该命令的输入数据。后一条命令也是通过标准输入端口接收输入数据。...

    Linux xargs 命令用法详解

    xargs 是给命令传递参数的一个过滤器,也是组合多个命令的一个工具。 xargs 可以将管道或标准输入(stdin)数据转换成命令行参数,也能够从文件的输出中读取数据。 xargs 也可以将单行或多行文本输入转换为其他格式...

    Linux-命令行 管道(Pipelines)详解

     过滤器(filter), 是把多条命令合在一起构成一个管道.  主要命令:  sort: 排序;  uniq, UNIQue, 输出没有重复行的数据; 参数-d, 可以输出重复行;  wc, 单词统计(Word Count); 参数-l, 只统计行;  ...

    LINUX 24学时教程

    14.1.11 使用sed和其他过滤器改变文本 240 14.2 对文档进行拼写检查 242 14.2.1 使用ispell命令改正文档 242 14.2.2 查找单个单词和其他技巧 243 14.3 课时小结 244 14.4 专家答疑 244 14.5 练习题 245 第15学时 ...

    Linux管理员指南

    目 录 前言 第一部分 安装Linux操作系统 作为服务器软件 第1章 Linux发行版本与Windows NT的 技术异同 1 1.1 Linux操作系统和Linux发行版本 1 1.2 “自由”软件和GNU许可证 1 1.2.1 什么是...

    UNIX/LINUX日常操作

    UNIX/LINUX日常操作和常用命令 • 登录和退出  • 设置终端或工作站的工作环境  .文件系统  • 常用操作命令  • 重定向、管道、过滤  • 进程查看和调度  • 使用全屏幕编辑器vi

    logstash_filter_LDAPresolve:LDAPresolve 过滤器将根据提供的 uidNumber 信息的 LDAP 请求将字段“登录”、“用户”和“组”添加到事件中

    LDAPresolve Logstash 插件 ...与所有过滤器一样,此过滤器一次仅处理 1 个事件,因此如果您的网络延迟较高,则使用此插件会显着降低管道的吞吐量。 为了减少减速,提供了缓存机制。 缓存中保存着给定

    详解Angularjs filter过滤器

    这篇简单说一下angularjs的filter功能,angularjs的filter功能可分为二种,一种是内置的过滤器,一种是自定义的。 Filter是用来格式化数据用的。 Filter的基本原型( ” 类似于Linux中的管道模式): {{ expression...

    详解AngularJS Filter(过滤器)用法

    AngularJS的filter,中文名“过滤器”是用来过滤变量的值,或者格式化输出,得到自己所期望的结果或格式的东东。 Filter简介 Filter是用来格式化数据用的。 Filter的基本原型( ‘|’ 类似于Linux中的管道模式): ...

    cmd操作命令和linux命令大全收集

    date /t 、 time /t 使用此参数即“DATE/T”、“TIME/T”将只显示当前日期和时间,而不必输入新日期和时间 set 指定环境变量名称=要指派给变量的字符 设置环境变量 set 显示当前所有的环境变量...

    Linux xargs命令的使用

    简单来说,xargs是给其他命令传递参数的一个过滤器,是构建单行命令的重要组件之一。 之所以要用到xargs,是因为由于很多命令不支持使用管道|来传递参数,例如: find /sbin -perm +700 |ls -l //这个命令是错误,...

    Linux xargs命令详细介绍

    简单来说,xargs是给其他命令传递参数的一个过滤器,是构建单行命令的重要组件之一。 之所以要用到xargs,是因为由于很多命令不支持使用管道|来传递参数,例如: find /sbin -perm +700 |ls -l //这个命令是错误,...

    Linux中xargs命令的使用方式.doc

    xargs 是给命令传递参数的一个过滤器,可以将管道或标准输入的数据转换成参数,默认的命令是 echo,这意味着通过管道传递给 xargs 的输入将会包含换行,不过通过 xargs 的处理,换行将被空格取代。

    Linux 常用文本处理命令和vim文本编辑器

    今天,来介绍几个常用文本处理命令和vim文本编辑器 day3–常用文本处理命令和vim文本编辑器  col,用于过滤控制字符,-b过滤掉所有控制字符,这个命令并不常用,但可以使用man 命令名| col -b >help.txt 导出一份...

Global site tag (gtag.js) - Google Analytics