xargs与管道的区别

echo ‘--help‘ | cat

输出:
--help

echo ‘--help‘ | xargs cat 
输出:

Usage: cat [OPTION]... [FILE]...
Concatenate FILE(s), or standard input, to standard output.

  -A, --show-all           equivalent to -vET
  -b, --number-nonblank    number nonempty output lines
  -e                       equivalent to -vE
  -E, --show-ends          display $ at end of each line
  -n, --number             number all output lines
  -s, --squeeze-blank      suppress repeated empty output lines
  -t                       equivalent to -vT
  -T, --show-tabs          display TAB characters as ^I
  -u                       (ignored)
  -v, --show-nonprinting   use ^ and M- notation, except for LFD and TAB
      --help     display this help and exit
      --version  output version information and exit

With no FILE, or when FILE is -, read standard input.

Examples:
  cat f - g  Output f‘s contents, then standard input, then g‘s contents.
  cat        Copy standard input to standard output.

可以看到 echo ‘--help‘ | cat   ,echo的输出通过管道定向到cat的输入, 然后cat从其标准输入中读取待处理的文本内容

而 echo ‘--help‘ | xargs cat 等价于 cat --help,  xargs将其接受的字符串 --help 变成cat的参数来运行

像 cat与grep这些文字处理工具能标准输入中读取待处理的内容,但像kill , rm 这些程序如果命令行参数中没有指定要处理的内容则不会默认从标准输入中读取

有时候需要 ps -ef | grep ‘ddd‘ | kill 这样的效果,筛选出符合某条件的进程pid然后结束。那么应该怎样达到这样的效果呢。有几个解决办法:

1. 通过 kill `ps -ef | grep ‘ddd‘`    
#等同于拼接字符串得到的命令,其效果类似于  kill $pid

2. for procid in $(ps -aux | grep "some search" | awk ‘{print $2}‘); do kill -9 $procid; done   
#其实与第一种原理一样,只不过需要多次kill的时候是循环处理的,每次处理一个

3. ps -ef | grep ‘ddd‘ | xargs kill  
#xargs命令可以通过管道接受字符串,作为后面命令的命令行参数

xargs也可以将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行。

xargs的默认命令是echo,空格是默认定界符。

xargs命令用法

xargs用作替换工具,读取输入数据重新格式化后输出。 一个文件,内有多行文本数据:

cat test.txt

a b c d e f g

h i j k l

m n o p q r

s t u v w x y z

多行输入单行输出:

cat test.txt | xargs

a b c d e f g h i j k l m n o p q r s t u v w x y z

-n选项多行输出: cat test.txt | xargs -n5

a b c d e

f g h i j k

l m n o p

q r s t u v

w x y z

-d选项可以自定义一个定界符:

echo "nameXnameXnameXname" | xargs -dX

name name name name

结合-n选项使用:

echo "nameXnameXnameXname" | xargs -dX -n2

name name

name name

-t 表示先打印命令,然后再执行。

-i 或者是-I,这得看linux支持了,将xargs的每项名称,一般是一行一行赋值给{}

$ ls
1.txt  2.txt  

$ ls *.txt |xargs -t -i mv {} {}.bak
mv 1.txt 1.txt.bak
mv 2.txt 2.txt.bak 

$ ls
1.txt.bak  2.txt.bak 

 

复制所有图片文件到 /data/images 目录下:

ls *.jpg | xargs -n1 -I cp {} /data/images

xargs结合find使用 用rm 删除太多的文件时候,可能得到一个错误信息:/bin/rm Argument list too long. 用xargs去避免这个问题:

find . -type f -name "*.log" -print0 | xargs -0 rm -f xargs

-0将\0作为定界符。 统计一个源代码目录中所有php文件的行数:

find . -type f -name "*.php" -print0 | xargs -0 wc -l

查找所有的jpg 文件,并且压缩它们:

find . -type f -name "*.jpg" -print | xargs tar -czvf images.tar.gz xargs

假如你有一个文件包含了很多你希望下载的URL,你能够使用xargs下载所有链接:

cat url-list.txt | xargs wget -c

时间: 2024-08-05 12:45:51

xargs与管道的区别的相关文章

[转] xargs命令详解,xargs与管道的区别

[From] https://www.cnblogs.com/wangqiguo/p/6464234.html 阅读目录 为什么要用xargs,问题的来源 xargs是什么,与管道有什么不同 xargs的一些有用的选项 回到顶部 为什么要用xargs,问题的来源 在工作中经常会接触到xargs命令,特别是在别人写的脚本里面也经常会遇到,但是却很容易与管道搞混淆,本篇会详细讲解到底什么是xargs命令,为什么要用xargs命令以及与管道的区别.为什么要用xargs呢,我们知道,linux命令可以从

xargs命令详解,xargs与管道的区别

为什么要用xargs,问题的来源 linux命令可以从两个地方读取要处理的内容,一个是通过命令行参数,一个是标准输入.命令行参数是通过main函数 int main(int argc,char*argv[]) 的函数参数获得的,而标准输入则是通过标准输入函数例如C语言中的scanf读取到的. 例如cat.grep就是这样的命令,举个例子: echo 'main' | cat test.cpp 这种情况下cat会输出test.cpp的内容,而不是'main'字符串,如果test.cpp不存在则ca

linux下xargs和管道的区别

管道将前面的标准输出作为后面的标准输入,xargs则将标准输入作为命令的参数 你可以试试运行如下代码: echo "--help"|catecho "--help"|xargs cat 结果如下: 如果你直接在命令行输入cat后回车,而不输入命令参数,这时cat会等待标准输入,你通过键盘输入内容并按回车来,cat进程会读取输入并原样返回. 所以如果此时你输入--help,那么cat程序会在标准输出上输出--help 也就是说, 管道符 | 所传递给程序的不是你简单地

对find,xargs,grep和管道的一些深入理解

转自于:http://fatmouse.xyz/2016/05/10/2016-05-10-find-grep-xargs-and-pipe/ 问题 相信大家都知道在目录中搜索含有固定字符串文件的命令: 1 find . -name '*.py' |xargs grep test 刚开始的时候,我不熟悉xargs命令,所以直接使用的命令是 1 find . -name '*.py' |grep test 结果并不是自己所期望的.此命令只是找出文件名*.txt有test的情况. 这里我就研究一下,

linux下xargs命令用法详解 【转】

xargs在linux中是个很有用的命令,它经常和其他命令组合起来使用,非常的灵活.xargs是给命令传递参数的一个过滤器,也是组合多个命令的一个工具.它把一个数据流分割为一些足够小的块,以方便过滤器和命令进行处理.由此 这个命令也是后置引用的一个强有力的替换.在一般使用过多参数的命令替换失败的时候,用xargs来替换它一般都能成功.通常情况下,xargs从管道或 者stdin中读取数据,但是它也能够从文件的输出中读取数据.xargs的默认命令是echo.这意味着通过管道传递给xargs的输入将

xargs命令详解

xargs是给命令传递参数的一个过滤器,也是组合多个命令的一个工具.它把一个数据流分割为一些足够小的块,以方便过滤器和命令进行处理.通常情况下,xargs从管道或者stdin中读取数据,但是它也能够从文件的输出中读取数据.xargs的默认命令是echo,这意味着通过管道传递给xargs的输入将会包含换行和空白,不过通过xargs的处理,换行和空白将被空格取代. 1.选项解释 -0 当sdtin含有特殊字元时候,将其当成一般字符,想/'空格等 例如:[email protected]:~/test

2. xargs 命令

1.简介 xargs是给命令传递参数的一个过滤器,也是组合多个命令的一个工具.它把一个数据流分割为一些足够小的块,以方便过滤器和命令进行处理.通常情况下,xargs从管道或者stdin中读取数据,但是它也能够从文件的输出中读取数据.xargs的默认命令是echo,这意味着通过管道传递给xargs的输入将会包含换行和空白,不过通过xargs的处理,换行和空白将被空格取代. 2. 选项解释 -0  以'\0'为字符串的定界符,输出字符串.(eg 1) -a file 从文件中读入作为sdtin,并打

xargs命令

xargs是给命令传递参数的一个过滤器,也是组合多个命令的一个工具.它把一个数据流分割为一些足够小的块,以方便过滤器和命令进行处理. 通常情况下,xargs从管道或者stdin中读取数据,但是它也能够从文件的输出中读取数据.xargs的默认命令是echo,这意味着通过管道传递给xargs的输入将会包含换行和空白,不过通过xargs的处理,换行和空白将被空格取代. xargs是一个非常强大的命令,可以取一个命令的输出作为另一个命令的参数.下面就是几个关于如何有效使用xargs命令的实例. 1.当你

每日linux命令学习-xargs命令

xargs命令 xargs是给命令传递参数的一个过滤器,也是组合多个命令的一个工具.它把一个数据流分割为一些足够小的块,以方便过滤器和命令进行处理.通常情况下,xargs从管道或者stdin中读取数据,但是它也能够从文件的输出中读取数据.xargs的默认命令是echo,这意味着通过管道传递给xargs的输入将会包含换行和空白,不过通过xargs的处理,换行和空白将被空格取代. xargs 是一个强有力的命令,它能够捕获一个命令的输出,然后传递给另外一个命令.      简单来说,通常与“|”搭配