xargs - 地下管道

xargs 促使我去思考,管道 | 的具象含义是什么。

$ cat sample.txt
Things to do today:
Low:Go grocery shopping
High:Return movie
High:Clear level 3 in Alien vs. Predator
Medium:Pick up clothes from dry cleaner

用管道符号可以组合出更实用的内容:优先级为 High 任务数量为 2。

$ cat sample.txt | grep 'High' | wc -l
2

其中 cat 命令接收一个参数,并将其内容打印到标准输出:当前屏幕。

本例中 sample.txt 内容并没有输出到屏幕上,内容被重定向到管道命令 | 缓存中了。

grep 命令需要两个参数,例如:grep 'Frank' name-list.csv,将从 name-list.csv 文件中查询有关键字 Frank 的行。

本例中第二个关键字是缺失的,grep 实际是从管道缓存里面读取了数据。

$ cat sample.txt | grep 'High' | wc -l

拼接命令的最后一个参数默认从管道里读取数据。

以上示例中 wc -l 命令如何读取从 grep 传到管道的数据,你就很容易想象了。

管道命令 | 是如此优雅的让多个命令合作无间,就像一个充满魅力的领航员,带领大家前进。

但一些早期命令,例如 rm,cp 等是不支持管道命令。你永远无法使用类似 cat rm.list | rm 的方式删除 rm.list 中列出的文件。

$ ls -l
1.txt
2.txt
3.txt
rm.list $ cat rm.list
1.txt
2.txt
3.txt

很遗憾,rm 命令就是无法从管道中读取数据。

管道命令 | 是如此优雅,以至于那些不支持从管道读取数据的命令都很令人恼火(大多是早期命令)。这些命令就像反抗军,在地下悄悄的、分散着活动着。

xargs 就像 Neo一样,横空出世,将以一己之力整合这些地下武装,我称之为:The One, 中文名:地下管道

$ cat rm.list | xargs rm

xargs 获取管道数据(同样作为自己的最后一个参数)并组织成 rm 命令的参数,再调用 rm,完成工作。

这就是一个经典的回调。

function xargs(cmd, args...) {
cmd args...
} xargs(rm, rm.list)

xargs 中传进命令和该命令执行需要的参数,函数体内中再封装,让这个命令能正确读取参数,最后执行命令,完成工作。

$ cat rm.list | xargs cat
from 1.txt
from 2.txt
from 3.txt

上例中,xargs 读取管道内容(一些列文件名),在执行 cat 命令时,将这些文件名作为参数传进 cat ,由此cat 一次性读取了三个文件里面的内容。

试想如果rm.list内容组织是以,分割(1.txt,2.txt,3.txt),cat 似乎就无法读取了。

你可能敏锐的感觉到了,如何组织好数据以让回调的命令能正确的作为参数读取,是使用好 xargs 的关键。

xargs 提供了很多选项,让你尽快能舒服的组织好这些参数。这些大家随手可搜,多加练习即可。)

最后:xargs 就像 The One (地下管道),组织起那些反叛的命令军,抵抗到底。

xargs - 地下管道的更多相关文章

  1. 每天一个 Linux 命令(21):find命令之xargs

    在使用 find命令的-exec选项处理匹配到的文件时, find命令将所有匹配到的文件一起传递给exec执行.但有些系统对能够传递给exec的命令长度有限制,这样在find命令运行几分钟之后,就会出 ...

  2. [Linux] xargs 和 管道符的区别

    今天刚好遇到需要使用xargs的情况,就来研究一下xargs 和 管道符的区别 举几个例子,下面两个语句执行后的结果是什么呢? 1. zhang$ find . -name "*.prope ...

  3. xargs -I

    xargs  -i 参数或者-I参数配合{}即可进行文件的操作.   -I replace-str              Replace  occurrences  of  replace-str ...

  4. find / -type f -name "*fetion*" |xargs rm -rf {}\

    find / -type f -name "*fetion*" |xargs rm -rf {}\

  5. linux命令:xargs

    1.命令介绍: xargs用来配合find命令查找的结果然后执行相应的命令 2.命令格式: find -type f -print | xargs file

  6. xargs的原理剖析及用法详解

    转载请注明出处:http://www.cnblogs.com/f-ck-need-u/p/5925923.html 学习这个xargs花了很长时间,在网上翻了很久也查了很多书关于xargs的介绍,都只 ...

  7. [Linux] xargs

    xargs 命令可以将一个命令的输出,作为另一个命令的输入! 这里听来好像是管道的功能,之所以有xargs是因为有的命令不知吃管道,这时xargs就派上用场了! 具体的方法是:前一个命令的输出会使用空 ...

  8. 【转】Linux中xargs的用法

    xargs大 多数 Linux 命令都会产生输出:文件列表.字符串列表等.但如果要使用其他某个命令并将前一个命令的输出作为参数该怎么办?例如,file 命令显示文件类型(可执行文件.ascii 文本等 ...

  9. Linux xargs将输出数据流转换成命令参数

    200 ? "200px" : this.width)!important;} --> 介绍 我们可以利用管道将一个命令的“标准输出”作为另一个命令的“标准输入”:但是这里的 ...

随机推荐

  1. (转载)DBCP、C3P0、Proxool 、 BoneCP开源连接池的比较

    原文链接: http://blog.csdn.net/miclung/article/details/7231553    简介   使用评价  项目主页  DBCP DBCP是一个依赖Jakarta ...

  2. Data Volume 之 bind mount - 每天5分钟玩转 Docker 容器技术(39)

    storage driver 和 data volume 是容器存放数据的两种方式,上一节我们学习了 storage driver,本节开始讨论 Data Volume. Data Volume 本质 ...

  3. python编程快速上手之第4章实践项目参考答案

    #!/usr/bin/env python3.5 # coding:utf-8 # 假定有一个列表,编写函数以一个列表值作为参数,返回一个字条串 # 该字符串包含所有表项,之间以逗号和空格分隔,并在最 ...

  4. 利用VNC远程登录Linux服务器简易版

    我负责管理实验室的一台服务器,安装的系统是CentOS 6.7.使用pietty远程登录服务器(命令行) 需求:使实验室的同学和老师使用RealVNC远程登录服务器. 一,首先检查一下服务器是否安装V ...

  5. gulp静态资源构建、压缩、版本号添加

    公司移动端商城使用前后分离方案,前台nginx静态文件,js使用requirejs模式,使用gulp压缩添加版本号时发现问题, 问题1.在公共的js配置中,引用的路径是写死的,缓存会一直存在. 解决方 ...

  6. 4,JPA-Hibernate

    一,什么是JPA JPA全称Java Persistence API.JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中. JPA(Java Pers ...

  7. 一步一步学Vue(二)

    接上篇,在本篇中,我们将要实现如下,功能,编辑和查询,我们当前的todolist程序,和线上其它的demo程序不同,我们会对其进行增删改查的基本操作,之后进行进一步的完善,按照常规的系统使用经验,一般 ...

  8. Nancy基于JwtBearer认证的使用与实现

    前言 最近在看JSON Web Token(Jwt)相关的东西,但是发现在Nancy中直接使用Jwt的组件比较缺乏,所以就在空闲时间写了一个. 这个组件是开源的,不过目前只支持.NET Core,后续 ...

  9. net.sz.framework 框架 ORM 消消乐超过亿条数据排行榜分析 天王盖地虎

    序言 天王盖地虎, 老婆马上生孩子了,在家待产,老婆喜欢玩消消乐类似的休闲游戏,闲置状态,无聊的分析一下消消乐游戏的一些技术问题: 由于我主要是服务器研发,客户端属于半吊子,所以就分析一下消消乐排行榜 ...

  10. EasyUI combobox 中文无法检索最终解决方案!

    写在前面: 因为之前一直用EasyUI的combobox控件,但是苦于在火狐浏览器下输入中文无法直接检索必须在输入完成后再敲击一下键盘才可以(按一下shift或空格),原因是中文输入法屏蔽了EasyU ...