xargs:将输入数据重新格式化后输出
简介xargs命令是给其他命令传递参数的一个过滤器,也是组合多个命令的一个工具。能将标准输出或管道的数据转换成xargs命令后其他命令的命令参数。 xargs也可以将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行。 xargs的默认命令是echo,空格是默认定界符。
说明
xargs命令是给其他命令传递参数的一个过滤器,也是组合多个命令的一个工具。能将标准输出或管道的数据转换成xargs命令后其他命令的命令参数。
xargs也可以将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行。
xargs的默认命令是echo,空格是默认定界符。
格式
xargs [option]
参数说明:
- -n:指定每行显示的数量
- -d:自定义分隔符
- -i:以{}代替前面的结果,这个使用最多
- -I:自定义一个符号来代替前面的结果,而不用-i的{}来代替
- -0:用null代替空格作为分隔符,配合find命令的-print0来一起使用,这个需要解决文件名中有空格
示例
多行文本边单行文本
[root@localhost test]# vim test.txt
[root@localhost test]# cat test.txt
a b c d e
f g h i j
k
l
m n o p
[root@localhost test]# cat test.txt | xargs #使用管道
a b c d e f g h i j k l m n o p
[root@localhost test]# xargs < test.txt #直接从文件从读取
a b c d e f g h i j k l m n o p
使用-n来指定每行显示的个数(默认以空格分隔)
[root@localhost test]# cat test.txt | xargs -n 3
a b c
d e f
g h i
j k l
m n o
p
[root@localhost test]# xargs -n 3 < test.txt
a b c
d e f
g h i
j k l
m n o
p
使用-d来指定分隔符
[root@localhost test]# echo "php|python|go|java"
php|python|go|java
[root@localhost test]# echo "php|python|go|java"|xargs -d "|"
php python go java
[root@localhost test]# echo "php|python|go|java"|xargs -d "|" -n 1 #也是将单行变成多行
php
python
go
java
使用-i参数
[root@localhost test]# find . -name "test*.txt"|xargs -i mv {} dir1/
[root@localhost test]# ll
total 4
drwxr-xr-x. 2 root root 4096 May 6 02:32 dir1
[root@localhost test]# ls dir1/
test01.txt test02.txt test03.txt test04.txt test05.txt test06.txt test07.txt test08.txt test09.txt test10.txt test.txt
-I参数的使用
[root@localhost test]# find dir1/ -name "test*.txt"|xargs -I [] mv [] .
[root@localhost test]# ls
dir1 test01.txt test02.txt test03.txt test04.txt test05.txt test06.txt test07.txt test08.txt test09.txt test10.txt test.txt
[root@localhost test]# ls dir1/
[root@localhost test]#
-0参数的使用
[root@localhost test]# touch test\ new.txt
[root@localhost test]# find . -name "test*.txt"|xargs rm
rm: cannot remove ‘./test’: No such file or directory
rm: cannot remove ‘new.txt’: No such file or directory
必须使用下面的命令才有用
[root@localhost test]# find . -name "test*.txt" -print0|xargs -0 rm