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. vsftpd配置虚拟用户

    #安装vsftpd yum -y install vsftpd #创建本地ftp账户 groupadd ftpuser useradd -g ftpuser -s /sbin/nologin ftpu ...

  2. SerializableObj

    package JBJADV003; import java.io.*; public class SerializableObj { /** * @param args * @throws IOEx ...

  3. win10 Internet Explorer 11 停止工作处理

    win10 Internet Explorer 11 停止工作处理:

  4. Java电器商场小系统--简单的java逻辑

    //商场类public class Goods { int no; //编号 String name; //商品名称 double price; //商品价格 int number; //商品数量 / ...

  5. Akka(13): 分布式运算:Cluster-Sharding-运算的集群分片

    通过上篇关于Cluster-Singleton的介绍,我们了解了Akka为分布式程序提供的编程支持:基于消息驱动的运算模式特别适合分布式程序编程,我们不需要特别的努力,只需要按照普通的Actor编程方 ...

  6. Bash : 索引数组

    Bash 提供了两种类型的数组,分别是索引数组(indexed array)和关联数组(associative array).本文主要介绍索引数组的基本用法. 索引数组的基本特点 Bash 提供的数组 ...

  7. js获取鼠标点击的对象,点击另一个按钮删除该对象

    作为js的一名新手,对于所谓的event的了解并不是太多,仅仅根据视频教学中的例子模仿着,写了诸如: function funcname(e) { e=window.event||event };的函 ...

  8. Android - FEATURE_NO_TITLE

    Android设置无标题的方法 在onCreate()中写入: requestWindowFeature(Window.FEATURE_NO_TITLE); 例如: protected void on ...

  9. FreeRTOS——资源管理

    1. 多任务系统存在一个潜在的风险:资源管理. 2. 基本临界区:taskENTER_CRITICAL() 与 taskEXIT_CRITICAL() 或 taskENTER_CRITICAL_FRO ...

  10. 51nod_1298:圆与三角形(计算几何)

    题目链接 判断圆和三角形是否相交   可以转化为   判断三条线段是否和圆相交 #include<iostream> #include<cstdio> #include< ...