Shell·xargs命令用法

本文节选自《Netkiller Shell 手札》

3.12. standard input/output

3.12.1. xargs - build and execute command lines from standard input

xargs命令用法

3.12.1.1. 格式化

xargs用作替换工具,读取输入数据重新格式化后输出。

			定义一个测试文件,内有多行文本数据:

cat >> test.txt <<EOF

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

EOF

# 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

等效
# cat test.txt | tr "\n" " "
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 -n3
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 -n4
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 -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 "name|age|sex|birthday" | xargs -d"|"
name age sex birthday

结合-n选项使用:

# echo "name=Neo|age=30|sex=T|birthday=1980" | xargs -d"|" -n1
name=Neo
age=30
sex=T
birthday=1980			

3.12.1.2. standard input

			# xargs < 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 /etc/passwd | cut -d : -f1 > users
# xargs -n1 < users echo "Your name is"
Your name is root
Your name is bin
Your name is daemon
Your name is adm
Your name is lp
Your name is sync
Your name is shutdown
Your name is halt
Your name is mail
Your name is operator
Your name is games
Your name is ftp
Your name is nobody
Your name is dbus
Your name is polkitd
Your name is avahi
Your name is avahi-autoipd
Your name is postfix
Your name is sshd
Your name is neo
Your name is ntp
Your name is opendkim
Your name is netkiller
Your name is tcpdump		

3.12.1.3. -I 替换操作

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

ls *.jpg | xargs -n1 -I cp {} /data/images			
			读取stdin,将格式化后的参数传递给命令xargs的一个选项-I,使用-I指定一个替换字符串{},这个字符串在xargs扩展时会被替换掉,当-I与xargs结合使用,每一个参数命令都会被执行一次:

# echo "name=Neo|age=30|sex=T|birthday=1980" | xargs -d"|" -n1 | xargs -I {} echo "select * from tab where {} "
select * from tab where name=Neo 
select * from tab where age=30 
select * from tab where sex=T 
select * from tab where birthday=1980 

# xargs -I user echo "Hello user" <users 
Hello root
Hello bin
Hello daemon
Hello adm
Hello lp
Hello sync
Hello shutdown
Hello halt
Hello mail
Hello operator
Hello games
Hello ftp
Hello nobody
Hello dbus
Hello polkitd
Hello avahi
Hello avahi-autoipd
Hello postfix
Hello sshd
Hello netkiller
Hello neo
Hello tss
Hello ntp
Hello opendkim
Hello noreply
Hello tcpdump

原文发布于微信公众号 - Netkiller(netkiller-ebook)

原文发表时间:2016-11-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏电光石火

运行jar包找不到主类

在正确编译好java程序之后,打包,然后在命令行输入java -jar ,却弹出找不到或无法加载主类。 一检查,我的path环境变量都是对的呀?jav...

1999
来自专栏用户画像

jQuery 实现 bootstrap 模态框 删除确认

点击删除按钮,通过jquery将删除操作的URL赋值到页面URL元素,并弹出会话框

472
来自专栏小筱月

vue 路由 及 跳转传递参数的总结

731
来自专栏程序员的碎碎念

php调用美图秀秀插件上传头像

登录美图秀秀WEB开放平台(http://open.web.meitu.com/wiki/), 1.1、设置crossdomain.xml 下载cros...

3275
来自专栏Python、Flask、Django

Flask使用flask_login登录时报的一个错误

752
来自专栏Samego开发资源

ubuntu安装C++之mysql库

1782
来自专栏james大数据架构

js中页面刷新和页面跳转的方法总结

.js中cookie的基本用法简介 2009-12-15 js中页面刷新和页面跳转的方法总结 文章分类:Web前端 关键字: javascript js中页面...

1898
来自专栏不想当开发的产品不是好测试

maven项目打jar包

打包有两种方式: 1、直接 项目--右键--export,选择JAR file打包(不推荐这种方式); 这样直接打的包通过java -jar 会提示“没有主清单...

2037
来自专栏用户2442861的专栏

python文件常用操作

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/haluoluo211/article/d...

563
来自专栏Angular&服务

解决mac上出现包损坏等情况,不能打开软件

686

扫描关注云+社区