Linux之玩转xargs
2016-05-01 11:56
316 查看
Man xargs
通常我们学习一个命令的时候,我们肯定首先使用man xargs,官方给定的解释是NAME xargs - build and execute command lines from standard input
构建并且执行从标准输入(stdin)的命令行。
大家应该对管道不陌生吧。我们可以用管道将一个命令的stdout(标准输出)重定向到另一个命令的stdin(标准输入)。例如:
cat test.txt | grep "test"
但是,有些命令只能用命令行参数的形式接受数据,无法通过stdin接受数据流。在这种情况下,我们没法用管道来提供那些只有通过命令行参数才能提供的数据。
没有了管道,但是我们有xargs。xargs能够处理stdin并将其转换为特定命令的命令行参数。也可以将单行或多行文本输入转换成其他格式,例如单行变多行或者多行变单行。Bash黑客都喜欢单行命令。单行命令是一个命令序列,各命令之间不使用分号,而是使用管道操作符进行连接。精心编写的单行命令可以更高效,更简捷完成任务。就文本处理而言,需要具备扎实的理论和实践才能写出适合的单行命令解决方法。
怎么用?
xargs命令把stdin接收到的数据重新格式化,再将其作为参数给其他命令。xargs可以作为一种替换方式,作用类似于find中的-exec参数。
多行输入变单行
只需要将换行符移除,再用” “进行代替就可以实现多行输入的转换。’\n’是一个换行符,换行符其实就是多行文本之间的定界符。利用xargs可以用空格替换掉’\n’。cat example.txt 1 2 3 4 5 6 7 8 9 10 cat example.txt | xargs 1 2 3 4 5 6 7 8 9 10
单行变多行
我们可以利用-n 参数制定每行最大显示个数这样我们就可以划分为多行了。cat example.txt | xargs -n 3 1 2 3 4 5 6 7 8 9 10
split切分
我们可以利用-d定制一个定界符,利用这个定界符进行切分。echo "splitXsplitXsplitXsplit" | xargs -d X split split split split
参数如何传递
在上面我们已经了解了xargs如何将stdin格式化不同的输出。现在我们把这些输出参数传递给命令。1.读取stdin,将格式化参数传递给命令
文件名为:cecho.sh #! /bin/bash echo $* '#'
当参数被传递给cecho.sh,它会将这些参数打印出来,并以#字符作为结尾。例如:
./cecho.sh arg1 agr2 arg1 agr2 # 如果是一行一行的输入 ./cecho.sh arg1 arg1 # ./cecho.sh arg2 arg2 #
如果我们这时有一个名为args.txt的参数列表文件我们这个时候可以使用xargs把参数导入这个命令。
cat args.txt | xargs ./cecho.sh arg1 arg2 arg3 #
如果我们有些时候需要固定不变的参数,可以使用-I,-I可以制定一个字符串用于替换。
cat args.txt | xargs -n 1 -I {} ./cecho.sh -p {} -l -p arg1 -l # -p arg2 -l # -p arg3 -l #
相关文章推荐
- Linux命令:查看版本信息+删除
- Linux Wireless基础知识
- Smart210学习记录-------linux驱动中断
- 如何在CentOS 7中添加新磁盘而不用重启系统
- ArchLinux 升级导致的wifi故障
- 深入分析_linux_spinlock_实现机制
- Linux内核学习总结
- Linux内核课程学习总结
- Centos7安装配置NFS服务和挂载
- Linux中Spinlock在ARM及X86平台上的实现
- centOS中修改语言环境
- CentOS 6.3下rsync服务器的安装与配置
- centOS中如何修改运行级别!
- Linux内核分析之九——课程总结
- Centos 6.5 FTP 文件服务器搭建
- 我的第一个嵌入式linux驱动3_完善2
- CentOS7和WindowsXP双系统安装和修复的一些问题
- linux基本命令(9)——touch命令
- linux的文件权限问题
- 设置linux工具支持中文: