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. 同一个sql在不同的oracle中执行时间不一样

    最近因为某些原因不得不重新配置服务器的环境,当然就是一些简单的程序运行环境,包括tomcat .oracle和其他的一些.原本觉得还蛮简单的东西,但是当我部署完成后在运行程序的过程中发现了一些隐性因数 ...

  2. HDU 5616 Jam's balance(DP)

    题目网址:http://acm.hdu.edu.cn/showproblem.php?pid=5616 题目: Jam's balance Time Limit: 2000/1000 MS (Java ...

  3. centos 6.5系统判断软件是否安装,如果没安装,则直接使用yum安装,并添加启动项

    function install_software(){ software=$1 s=`rpm -qa|grep ${software}` result=$(echo ${s}|grep ${soft ...

  4. 真实记录我入门学习Linux系统的经历

    我本身来说并不是计算机专业的学生,因此今天来谈及这个话题,对大家来说,有了更多的客观公正性.对我而言,linux给我最大的财富,并不是编程能力提高了多少,而是视野的开阔.心态的转变和自学能力的提高.我 ...

  5. 没有绝对安全的系统:写在AES 256破解之后

    NULL 在理论上,理论和实践是一致的.在实践中,呵呵. ——(应该是)爱因斯坦(说的) (INFO:本文中不会出现公式,请放心阅读) AES 256被破解了? 对于TLNR(Too Long, No ...

  6. 在Visual Studio 2017中发现的问题

    最近抽时间学习了一下 C# 6.0 的新特性,其中的一个新特性是 ?. 运算符,请看下面的一个简单示例: 当我故意修改成错误代码的时候,请接着看下面的示例: 我想把代码修改成list?[0].Coun ...

  7. NLP —— 图模型(三)pLSA(Probabilistic latent semantic analysis,概率隐性语义分析)模型

    LSA(Latent semantic analysis,隐性语义分析).pLSA(Probabilistic latent semantic analysis,概率隐性语义分析)和 LDA(Late ...

  8. Windows查看端口使用状况

    使用端口是我们在进行远程或者打印机等都会遇到的,但是有很多用户会遇到端口被占用的情况,遇到这样的问题首先就要找出电脑中的所以端口然后进行查看,还是有很多人不知道该如何查看电脑端口. 1 查看windo ...

  9. HTML5 开发APP(打开相册以及图片上传)

    我们开发app,常常会遇到让用户上传文件的功能.比如让用户上传头像.我公司的业务要求是让用户上传支付宝收款二维码,来实现用户提现的功能.想要调用相册要靠HTML Plus来实现.先上效果图 基本功能是 ...

  10. python自动化运维:系统基础信息模块

    p { margin-bottom: 0.25cm; line-height: 120% } a:link { } 第一章: 首先介绍下系统性能信息模块:psutil psutil能够轻松实现获取系统 ...