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 ...
随机推荐
- Spring AOP 实现读写分离
原文地址:Spring AOP 实现读写分离 博客地址:http://www.extlight.com 一.前言 上一篇<MySQL 实现主从复制> 文章中介绍了 MySQL 主从复制的搭 ...
- 希尔排序算法-python实现
#-*- coding: UTF-8 -*- import numpy as np def ShellSort(a): gap = a.size / 2 while gap >= 1: for ...
- 解决navicat连接不上mysql服务器
设置mysql密码 如果mysql用户密码为空,需要设置后第三方mysql操作工具才可以连接 进入数据库:mysql -uroot -p use mysql; update user set pass ...
- 【转】java内存分配和String类型的深度解析
一.引题 在java语言的所有数据类型中,String类型是比较特殊的一种类型,同时也是面试的时候经常被问到的一个知识点,本文结合java内存分配深度分析关于String的许多令人迷惑的问题.下面是本 ...
- 除去a标签target="_blank"的方法
用Jquery:$(function(){$("div>a").attr("target","_blank");});先查找页面上的d ...
- ORM sqlachemy
本节内容 ORM介绍 sqlalchemy安装 sqlalchemy基本使用 多外键关联 多对多关系 表结构设计作业 1. ORM介绍 orm英文全称object relational mapping ...
- python mysql模块
多次使用python操作mysql数据库,先与大家分享一下,关于如何使用python操作mysql数据库.mysql并不是python自带的模块,因此需要下载安装.(在windows平台下介绍该使用过 ...
- 精《Linux内核精髓:精通Linux内核必会的75个绝技》一HACK #7 Cgroup、Namespace、Linux容器
HACK #7 Cgroup.Namespace.Linux容器 本节将介绍Cgroup与Namespace以及通过这两个功能实现的容器功能.CgroupCgroup(control group)是将 ...
- ArrayList实现
数组实现父类:AbstractList接口:List,RandomAccess,Cloneable,Serializable字段://默认容量private static final int DEFA ...
- 好记性不如烂笔头-linux学习笔记3mysql数据库导入导出
1 数据库文件导出 mysqldump -uroot -p123456 test > 1.sql 2数据库文件导入 mysql -uroot -p123456 test <1.sql 3 ...