程序地带

shell-xargs


overview

将前一个命令的标准输出传递给下一个命令,作为它的参数,也可以做一些文字处理。 比如某文件中的内容是按行存储的,xargs将此文件内容转成按空格分隔的然后传给后续命令。 xargs也可以将单行或多行文本输入转换为其他格式(例如:单行变多行,多行变单行)。 xargs的默认命令是echo,空格是默认定界符。


同 |管道的区别

管道“|” 用来将前一个命令的标准输出传递到下一个命令的标准输入。


xargs 将前一个命令的标准输出传递给下一个命令,作为它的参数。


可见,标准输入与命令参数是不同的。个人理解,命令参数就是直接跟在命令后面的,标准输入可以是键盘,文件等。


所以,管道符 | 所传递给程序的不是简单地在程序名后面输入的参数,它们会被程序内部的读取功能如scanf和gets等接收,而xargs则是将内容作为普通的参数传递给程序,相当于直接跟在命令后面。况且,有些命令是不接受标准输入的,比如kill,rm等命令。


总结:管道符后不加xargs相当于先将xargs后面的命令回车执行一下再从键盘里输入管道符前面命令执行的结果内容


加上xargs 相当于执行命令(xargs后面的命令)后,直接从键盘输入管道符前面命令执行的结果内容再回车,即管道前面的结果直接跟在xargs 后面的命令后面


再总结一下,就是回车的先后顺序不太一样。


语法

一般是2个命令结合用,一般与管道“|”结合使用


front command | xargs -option latercommand
front command: 前一个命令
-option: xargs的选项
later command: 后一个命令
options
{1} -n 指定每行个数

将单行输入转换成多行输出。


[root@dns-node2 ~]# cat example.txt | xargs -n 3
1 2 3
4 5 6
7 8 9
10 11 12
13
{2} -d: 自定义参数界定符

xargs 命令接受来自 stdin 的输入,将数据解析成单个元素,然后调用指定命令并将这些元素作为该命令的参数。 xargs 默认使用空白字符分割输入并执行/ bin/echo 。 如果文件或目录名中包含空格(甚至是换行)的话,使用空白字符来分割输入就会出现问题。 比如My Documents目录就会被解析成两个元素: My 和 Documents ,而这两者均不存在。我们可以定义一个用来分隔参数的分隔符。 -d 选项可以为输入数据指定自定义的分隔符


[root@dns-node2 ~]# echo "a1xb2xc3xd4" | xargs -d x
a1 b2 c3 d4
{3} -0: 如果输入的 stdin 含有特殊字符,例如 `, , 空白键等等字符时,这个 -0 参数可以将他还原成一般字符。
{4} 体验性

-e: 这个是 EOF (end of file) 的意思。后面可以接一个字符串,当 xargs 分析到这个字符串时,就会停止继续工作!


-p: 询问是否运行 later command 参数,在执行每个指令的 argument 时,都会询问使用者的意思,用于验证传参是否正确;


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


usage
同find结合

xargs 命令可以同 find 命令很好地结合在一起。 find 的输出可以通过管道传给 xargs, 由后者执行 -exec 选项所无法处理的复杂操作。如果文件系统的有些文件名中包含空格, find 命令的-print0 选项可以使用 0 (NULL)来分隔查找到的元素,然后再用 xargs 对应的 -0 选项进行解析。


find /sbin -perm +700 |ls -l #这个命令是错误的,因为ls不支持管道
find /sbin -perm +700 |xargs ls -l #这样才是正确的
[root@dns-node2 tmp]# find ./ -iname "*.sh" |xargs -0 grep sleep -L
grep: ./testSet.sh

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_34224565/article/details/111246198

随机推荐

Visual Studio:创建Linux Cmake项目

Visual Studio:创建Linux Cmake项目

准备请确保安装了使用C++的Linux开发的工具负载创建建议为跨平台或将设为开源的项目使用CMake1、在VisualStudio中选择“文件>新建->项目”,...

Ocean&&Star 阅读(880)

闭包函数 python_python基础知识之函数初阶——闭包

什么是闭包?其实我们在使用函数过程中不经意间就会触发闭包,因为总会出于某种原因会在函数内引用或修改上一层函数的变量,这时就会触发闭包那么什么是闭包࿱...

weixin_39714275 阅读(615)

python内置函数可以用来_python内置函数

abs()返回数字的绝对值。print(abs(-12))#结果:12print(abs(1.23))#结果:1.23all()参数为一个可迭代对象,如果可迭代对象的元素有一个为...

weixin_39642990 阅读(922)

设计模式学习之外观模式

设计模式学习之外观模式

外观模式为子系统中的一组接口提供一个统一的入口。外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用,是一种对象结构型模式类图实现SubSystem子系统pack...

卍暴力出奇迹卍 阅读(120)

JLink Script文件基础及其在IAR下调用方法

JLink Script文件基础及其在IAR下调用方法

关注+星标公众号,不错过精彩内容转自|痞子衡嵌入式今天给大家给大家分享一篇由痞子衡整理的文章:JLinkScript文件基础及其在IAR下调用方法。JLink可以说...

ybhuangfugui 阅读(399)

python中var函数_使用var函数变量

JavaScript函数函数是由事件驱动的或者当它被调用时执行的可重复使用的代码块。JavaScript函数语法函数就是包裹在花括号中的代码块,前面使用了关键词functionÿ...

weixin_39624429 阅读(583)

寒冬虽至,五大利好吹送牛市春风?

寒冬虽至,五大利好吹送牛市春风?

牛市已至,比特币震荡走高,大市值主流币独领风骚。文|二十三画生  运营|盖遥 编辑|Mandy王梦蝶出品 | Odaily星球日报(ID:o-d...

Odaily_ 阅读(886)