【linux命令】单行命令利器——xargs

来源:互联网 发布:舞剧十面埋伏知乎 编辑:程序博客网 时间:2024/06/06 01:14

bash黑客都喜欢单行命令——命令间并不用分好链接,而是使用链接操作符进行连接。

xrags把从stdin就收到的数据重新格式化。在座位参数提供给其他命令。

将多行数据单行输出:
$cat example.txt 

1

2

3

456

$cat example.txt | xargs

1 2 3 4 5 6 

将单行数据多行输出

$cat example.txt | xargs -n 3

以每行3个数字(空格为界定符)

自己定义界定符:

$ echo “spiltxspiltxspilt” | xargs -d “x” -n 2

spilt spilt

spilt 

读取stdin,将格式化参数传递给命令

我们这里编写一个定制版echo脚本

#/bin/bash

#FIlename:cecho.sh

echo $*’#’

我们可以手动将三个参数arg1arg2arg3传给cecho.sh

那如何利用xargs呢?

$ cat args.txt

args1

args2

args3

每次执行一次参数:

$cat args.txt | xargs -n 1 ./cecho.sh

args1 #

args2 #

args3 #

每次执行两个参数:

$cat args.txt | xargs -n 2 ./cecho.sh

args1 args2 #

args3 #

全部执行:
$cat args.txt | xargs  ./cecho.sh

args1 args2 args3 #

假如我们需要参数中有的参数是可变的,有的是不可变的怎么办?
例如我们希望输出格式如下:

./cecho.sh www arg1 xxoo

其中wwwxxoo是不可变的,arg1是可变的。

$cat args.txt | xargs -I {} ./cecho.sh www {} xxoo

www arg1 xxoo

www arg2 xxoo

www arg3 xxoo

-I {} 指定了替换字符串。使用-I时,命令就像是在一个循环中一样,有几个参数就会执行几次。

findxargs结合

$find . type f -name “*.txt” -print | xargs rm -f

找出后缀.txt的文件并删除

但是这样做很危险,因为我们不知道find的分割符是什么?是’\n’还是“ ” 。

(例如 hell text.txt会被xargs误认为是hell 和 text.txt

这是我们就需要利用 -print0find进行结合。以保证文件文件间是以null间隔的。

$find . type f -name “*.txt” -print0| xargs -0 rm -f

统计源代码目录下C程序文件的行数

$ find C_path -type f -iname “*.c” -print0 | xargs -0 wc -l

原创粉丝点击