Linux之玩转xargs

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 #
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值