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 条评论
登录 后参与评论

相关文章

来自专栏有趣的Python

12- Flask构建弹幕微电影网站-后台逻辑(四)

已上线演示地址: http://movie.mtianyan.cn 项目源码地址:https://github.com/mtianyan/movie_proj...

2516
来自专栏章鱼的慢慢技术路

MFC绘图基础——上机操作步骤

2453
来自专栏Java成神之路

Idea_学习_09_Idea 方法自动生成参数默认名

生成方法后,还空着参数,可以使用 ctrl + alt + 空格 ,列出参数,然后选择参数即可。

764
来自专栏狂码一生

QT5中操作QWidgetItem下的集合元素

1133
来自专栏王磊的博客

NBear简介与使用图解

NBear简介与使用图解 框架类型:ORM映射框架 简介:NBear是一个基于.Net 2.0、C#2.0开放全部源代码的的软件开发框架类库。NBear的设计目...

40812
来自专栏计算机编程

【vue随手笔记】MuseUI 自定义 select 适配 mobile

通过 emit将result值发给外部实现字父组件的双向绑定,于是父组件获取result值即:

852
来自专栏用户2442861的专栏

sublime text 配置php调试环境(快捷键)

2、在sublime text 2中 工具->编译系统->新建编译系统 添加如下代码:

411
来自专栏Aloys的开发之路

VIM常见用法总结

vim中光标如何回到上一次位置 ctrl + o vim如何删除某行至某行之间的内容? 删除3104至5403行之间的内容: :3104,5403d vim使光...

3026
来自专栏守望轩

Visual Studio 2008 每日提示(五)

#041、 通过返回标记,在编辑器向前或向后定位代码 原文地址:http://blogs.msdn.com/saraford/archive/2007/09/...

3266
来自专栏用户画像

H5无插件范式

过去,很多功能只能通过插件或者复杂的hack(本地绘图API、本地socket等)来实现,但是在HTML5中提供了对这些功能的原生支持。

502

扫码关注云+社区