Linux 基础教程 42-xargs命令
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命令的更多相关文章
- Linux 基础教程 37-进程命令
pidof 我们知道每个小孩一出生就会一个全国唯一的编号来对其进行标识,用于以后上学,办社保等,就是我们的身份证号.那么在Linux系统中,用来管理运行程序的标识叫做PID,就是大家熟知的进程 ...
- Linux 基础教程 32-解压缩命令
将文件压缩后对提升数据传输效率,降低传输带宽,管理备份数据都有非常重要的功能,因此文件压缩解压技能就成为必备技能.相对于Windows中的文件解压缩工具百花争艳,在Linux中的解压缩工具则要 ...
- 嵌入式LINUX基础教程 第2版
嵌入式LINUX基础教程 第2版 目录 第1章 入门 11.1 为什么选择Linux 11.2 嵌入式Linux现状 21.3 开源和GPL 21.4 标准及相关组织 31.4.1 Linux标准基 ...
- Linux基础 - 系统优化及常用命令
目录 Linux基础系统优化及常用命令 Linux基础系统优化 网卡配置文件详解 ifup,ifdown命令 ifconfig命令 ifup,ifdown命令 ip命令 用户管理与文件权限篇 创建普通 ...
- Linux基础系统优化及常用命令
# Linux基础系统优化及常用命令 [TOC] ## Linux基础系统优化 Linux的网络功能相当强悍,一时之间我们无法了解所有的网络命令,在配置服务器基础环境时,先了解下网络参数设定命令. - ...
- Linux基础01 学会使用命令帮助
Linux基础01 学会使用命令帮助 概述 在linux终端,面对命令不知道怎么用,或不记得命令的拼写及参数时,我们需要求助于系统的帮助文档:linux系统内置的帮助文档很详细,通常能解决我们的问题, ...
- Linux基础教程 linux中使用find命令搜索文件常用方法记录
find是linux非常强大的搜索命令,通过man find查看find手册,可以发现find的说明一屏接一屏,估计要看完也得花不少时间.兄弟连Linux培训 小编总结了下,整理出find常用的使用方 ...
- Embedded Linux Primer----嵌入式Linux基础教程--2.4节--嵌入式Linux发行版
嵌入式Linux发行版 究竟什么是Linux发行版?在Linux内核引导之后,它期望找到并挂载根文件系统.当一个匹配的根文件系统已经挂载上,启动脚本开始运行大量程序和系统要求的工具.这些程序经常调用其 ...
- [SQL基础教程] 4-2 数据删除(DELETE)
[SQL基础教程] C4 数据更新 4-2 数据删除(DELETE) DROP TABLE / DELETE DROP TABLE - 完全删除表 DELETE - 仅删除数据,保留表容器 DELET ...
- Linux基础教程
Linux基础教程之<Linux就该这么学>之学习笔记第一篇... ========================= 一.Basic Linux Commands 基本的Linux ...
随机推荐
- 【白银组】codevs_1011 数的计算
简单而言,就是递归的运用,注意使用全局变量统计cnt,并且注意递归的结束,中间生成的值无需进行输出. http://codevs.cn/problem/1011/ #include<iostre ...
- linux中查看nginx、apache、php、mysql配置文件路径的方法
如何在Linux中查看nginx.apache.PHP.MySQL配置文件路径了,如果你接收一个别人配置过的环境,但没留下相关文档.这时该怎么判断找到正确的加载文件路径了.可以通过以下来判断1.判断a ...
- ExtJs 扩展类CheckColumn的使用(事件触发)
[javascript] view plain copy print? 使用 Extjs 在进行数据库编程经常会遇到 checkbox 的问题(奇怪网上却没有此类文章不知道其他人是怎么解决的,在此贴上 ...
- erlang的一些系统限制修改
atom个数限制 +t xxx 进程数限制 +P xxxx ets表个数限制 +e xxx ports个数限制 +Q xxxx 查看限制 string:tokens(binary_to_list(er ...
- Spring cloud 之Feign基本使用
首先导入feign的依赖: <!-- 添加feign声明式webservice client --> <dependence> <groupId>org.sprin ...
- 读java并发编程笔记
同步策略:在共享资源上面加锁 java监视器模式:class对象-与之对应的锁(内置锁)[对象锁与class锁] 执行策略: 取消策略: =============================== ...
- php+nginx环境下的php报错设置
修改php.ini的配置: display_errors = Off(关闭) display_errors = On(开启) 设置修改完成后重启php-cgi进程 killall -9 php-cgi ...
- AngularJS学习笔记(2)——与用户交互的动态清单列表
与用户交互的动态清单列表 以我之前写的一个清单列表页面作为例子(MVC模式的清单列表效果),优化前代码如下: <!DOCTYPE html> <html ng-app="t ...
- 关于hibernate4.3版本之后org.hibernate.service.ServiceRegistryBuilder被弃用
之前一直都是使用hibernate4.2.21的我,有一天突然没有使用本地的jar包而是让IDEA自动下载最新版本的hibernate5.2.2之后,发现有几个经常使用的方法报错了. -这真是让我惊了 ...
- X264编码流程详解(转)
http://blog.csdn.net/xingyu19871124/article/details/7671634 对H.264编码标准一直停留在理解原理的基础上,对于一个实际投入使用的编码器是如 ...