xargs是execute arguments的缩写,主要作用是从标准输入中读取内容,并将此内容传递给它要协助的命令,并作为要协助命令的参数来执行

基本语法

xargs [选项] [命令]

其常用选项如下:

选项 说明
--null ,-0 允许将NULL作为分隔符
-a file 从文件读取项而非标准输入
-d delim 指定分隔符
-p ,--interactive 交换模式,在执行命令,需要用户确认是否执行
-n max-args 用于指定每次传递多少个参数给其后面的命令
-E eof-str 指定命令结束标识符
-e eof-str 同 -E eof-str
-i {replace-str} 将replace-str替换为从标准输入里读入的名称
-I {replace-str} 功能同-i {replace-str}

与管道的区别

我们先来看看两个例子:

  • 示例1
[root@localhost ~]# cat test.txt
this is test text.
[root@localhost ~]# echo test.txt | cat
test.txt
[root@localhost ~]# echo test.txt | xargs cat
this is test text.
  • 示例2
[root@localhost ~]# echo "--help" | cat
--help
[root@localhost ~]# echo "--help" | xargs cat
用法:cat [选项]... [文件]...
将[文件]或标准输入组合输出到标准输出。 -A, --show-all 等于-vET
-b, --number-nonblank 对非空输出行编号
-e 等于-vE
-E, --show-ends 在每行结束处显示"$"
-n, --number 对输出的所有行编号
-s, --squeeze-blank 不输出多行空行
-t 与-vT 等价
-T, --show-tabs 将跳格字符显示为^I
-u (被忽略)
-v, --show-nonprinting 使用^ 和M- 引用,除了LFD和 TAB 之外

从上面的例子,我们可以总结如下结论:

  • 管道可以实现将前面的标准输出作为后面命令的标准输入
  • 管道无法实现将前面的标准输出作为后面命令的命令参数

在Linux中的很多命令都是可以先从命令行参数中获取参数,然后从标准输入读取,最后通过标准输出显示结果。而如果想要实现将前面的标准输出做为后面命令的命令参数,则需要使用命令xargs

示例用法

1、-d选项

[root@localhost ~]# echo '2018-08-11' | xargs echo
2018-08-11
[root@localhost ~]# echo '2018-08-11' | xargs -d '-' echo
2018 08 11

2、-p选项

[root@localhost ~]# echo '2018-08-11' | xargs -d '-' -p echo
echo 2018 08 11
?...y
2018 08 11

3、-n选项

[root@localhost ~]# echo '2018-08-11' | xargs -d '-' -n 1 echo
2018
08
11

上述示例中表示xargs每次仅从标准输入传递一个参数给后面的命令,被分隔后的参数为3个,因此显示为3行。

4、-E选项

[root@localhost ~]# echo '2018 08 11' | xargs  -E '08' echo
2018 [root@localhost ~]# echo '2018-08-11' | xargs -d '-' -E '08' echo
2018 08 11

当xargs解析出多个命令行参数时,如果搜索到-E指定的命令行参数,则终止并退出。需要注意的是 -E 参数只有在不指定 -d 的时候才有效

5、-0选项

-0 选项表示以'\0'为分隔符,一般常与find结合使用

[root@localhost test]# find . -name '*.txt'
./1.txt
./2.txt
./3.txt
./4.txt
./test.txt
# 默认情况find的结果中每条记录中会添加一个换行符
[root@localhost test]# find . -name '*.txt' -print0
./1.txt./2.txt./3.txt./4.txt./test.txt
# print0表示显示的输出结果后面增加'\0'而不是换行符 [root@localhost test]# find . -name '*.txt' -print0 | xargs -0 echo
./1.txt ./2.txt ./3.txt ./4.txt ./test.txt [root@localhost test]# find . -name '*.txt' -print0 | xargs -d '\0' echo
./1.txt ./2.txt ./3.txt ./4.txt ./test.txt # xargs中的-0和-d '\0'表示从标准输入读取内容以'\0'进行分隔,因find的结果中是以'\0'进行分隔,所以xargs使用'\0'将find的结果分隔之后得到5个参数,而且参数中间有空格做为间隔。

6、-i选项

[root@localhost test]# find ./ -name '*.txt' | xargs -i cp {} /tmp/temp/
[root@localhost test]# ll /tmp/temp/
总用量 20
-rw-r--r-- 1 root root 6 8月 12 00:10 1.txt
-rw-r--r-- 1 root root 6 8月 12 00:10 2.txt
-rw-r--r-- 1 root root 6 8月 12 00:10 3.txt
-rw-r--r-- 1 root root 6 8月 12 00:10 4.txt
-rw-r--r-- 1 root root 19 8月 12 00:10 test.txt

7、-I选项

[root@localhost test]# find ./ -name '*.txt' | xargs -I {} -i cp {} /tmp/temp/
[root@localhost test]# ll /tmp/temp/
总用量 20
-rw-r--r-- 1 root root 6 8月 12 00:14 1.txt
-rw-r--r-- 1 root root 6 8月 12 00:14 2.txt
-rw-r--r-- 1 root root 6 8月 12 00:14 3.txt
-rw-r--r-- 1 root root 6 8月 12 00:14 4.txt
-rw-r--r-- 1 root root 19 8月 12 00:14 test.txt

-i和-I选项的区别如下所示:

  • -i:直接用{}就能替换管道之前的标准输出中的内容
  • -I:需要事先指替换符

本文同步在微信订阅号上发布,如各位小伙伴们喜欢我的文章,也可以关注我的微信订阅号:woaitest,或扫描下面的二维码添加关注:

Linux 基础教程 42-xargs命令的更多相关文章

  1. Linux 基础教程 37-进程命令

    pidof     我们知道每个小孩一出生就会一个全国唯一的编号来对其进行标识,用于以后上学,办社保等,就是我们的身份证号.那么在Linux系统中,用来管理运行程序的标识叫做PID,就是大家熟知的进程 ...

  2. Linux 基础教程 32-解压缩命令

        将文件压缩后对提升数据传输效率,降低传输带宽,管理备份数据都有非常重要的功能,因此文件压缩解压技能就成为必备技能.相对于Windows中的文件解压缩工具百花争艳,在Linux中的解压缩工具则要 ...

  3. 嵌入式LINUX基础教程 第2版

    嵌入式LINUX基础教程  第2版 目录 第1章 入门 11.1 为什么选择Linux 11.2 嵌入式Linux现状 21.3 开源和GPL 21.4 标准及相关组织 31.4.1 Linux标准基 ...

  4. Linux基础 - 系统优化及常用命令

    目录 Linux基础系统优化及常用命令 Linux基础系统优化 网卡配置文件详解 ifup,ifdown命令 ifconfig命令 ifup,ifdown命令 ip命令 用户管理与文件权限篇 创建普通 ...

  5. Linux基础系统优化及常用命令

    # Linux基础系统优化及常用命令 [TOC] ## Linux基础系统优化 Linux的网络功能相当强悍,一时之间我们无法了解所有的网络命令,在配置服务器基础环境时,先了解下网络参数设定命令. - ...

  6. Linux基础01 学会使用命令帮助

    Linux基础01 学会使用命令帮助 概述 在linux终端,面对命令不知道怎么用,或不记得命令的拼写及参数时,我们需要求助于系统的帮助文档:linux系统内置的帮助文档很详细,通常能解决我们的问题, ...

  7. Linux基础教程 linux中使用find命令搜索文件常用方法记录

    find是linux非常强大的搜索命令,通过man find查看find手册,可以发现find的说明一屏接一屏,估计要看完也得花不少时间.兄弟连Linux培训 小编总结了下,整理出find常用的使用方 ...

  8. Embedded Linux Primer----嵌入式Linux基础教程--2.4节--嵌入式Linux发行版

    嵌入式Linux发行版 究竟什么是Linux发行版?在Linux内核引导之后,它期望找到并挂载根文件系统.当一个匹配的根文件系统已经挂载上,启动脚本开始运行大量程序和系统要求的工具.这些程序经常调用其 ...

  9. [SQL基础教程] 4-2 数据删除(DELETE)

    [SQL基础教程] C4 数据更新 4-2 数据删除(DELETE) DROP TABLE / DELETE DROP TABLE - 完全删除表 DELETE - 仅删除数据,保留表容器 DELET ...

  10. Linux基础教程

    Linux基础教程之<Linux就该这么学>之学习笔记第一篇... ========================= 一.Basic Linux Commands    基本的Linux ...

随机推荐

  1. 【白银组】codevs_1011 数的计算

    简单而言,就是递归的运用,注意使用全局变量统计cnt,并且注意递归的结束,中间生成的值无需进行输出. http://codevs.cn/problem/1011/ #include<iostre ...

  2. linux中查看nginx、apache、php、mysql配置文件路径的方法

    如何在Linux中查看nginx.apache.PHP.MySQL配置文件路径了,如果你接收一个别人配置过的环境,但没留下相关文档.这时该怎么判断找到正确的加载文件路径了.可以通过以下来判断1.判断a ...

  3. ExtJs 扩展类CheckColumn的使用(事件触发)

    [javascript] view plain copy print? 使用 Extjs 在进行数据库编程经常会遇到 checkbox 的问题(奇怪网上却没有此类文章不知道其他人是怎么解决的,在此贴上 ...

  4. erlang的一些系统限制修改

    atom个数限制 +t xxx 进程数限制 +P xxxx ets表个数限制 +e xxx ports个数限制 +Q xxxx 查看限制 string:tokens(binary_to_list(er ...

  5. Spring cloud 之Feign基本使用

    首先导入feign的依赖: <!-- 添加feign声明式webservice client --> <dependence> <groupId>org.sprin ...

  6. 读java并发编程笔记

    同步策略:在共享资源上面加锁 java监视器模式:class对象-与之对应的锁(内置锁)[对象锁与class锁] 执行策略: 取消策略: =============================== ...

  7. php+nginx环境下的php报错设置

    修改php.ini的配置: display_errors = Off(关闭) display_errors = On(开启) 设置修改完成后重启php-cgi进程 killall -9 php-cgi ...

  8. AngularJS学习笔记(2)——与用户交互的动态清单列表

    与用户交互的动态清单列表 以我之前写的一个清单列表页面作为例子(MVC模式的清单列表效果),优化前代码如下: <!DOCTYPE html> <html ng-app="t ...

  9. 关于hibernate4.3版本之后org.hibernate.service.ServiceRegistryBuilder被弃用

    之前一直都是使用hibernate4.2.21的我,有一天突然没有使用本地的jar包而是让IDEA自动下载最新版本的hibernate5.2.2之后,发现有几个经常使用的方法报错了. -这真是让我惊了 ...

  10. X264编码流程详解(转)

    http://blog.csdn.net/xingyu19871124/article/details/7671634 对H.264编码标准一直停留在理解原理的基础上,对于一个实际投入使用的编码器是如 ...