xargs命令

xargs的作用

xargs命令从stdin处读取一系列参数,然后使用这些参数来执行指定命令。它能将单行或多行输入文本转换成其他格式,例如单行变多行或是多行变单行。 

 

xargs的工作原理

xargs命令接受来自stdin的输入,将数据解析成单个元素,然后调用指定命令并将这些元素作为该命令的参数。xargs默认使用空白字符分割输入并执行/bin/echo。

 

xargs的常见用法

1、将多行输入转换成单行输出

xargs默认的echo命令可以用来将多行输入转换成单行输出。

[root@vmax0105 test_shell]# cat file.txt
1 2 3 4 5 6
7 8 9 10
11 12
[root@vmax0105 test_shell]# cat file.txt | xargs
1 2 3 4 5 6 7 8 9 10 11 12

2、将单行输入转换成多行输出

xargs的-n选项可以将输入分割成多行,每行N个元素。

[root@vmax0105 test_shell]# cat file.txt | xargs -n 3
1 2 3
4 5 6
7 8 9
10 11 12

3、自定义分隔参数的分隔符

xargs的-d选项可以为输入数据指定自定义的分隔符
[root@vmax0105 test_shell]# echo "a;b;c" | xargs
a;b;c
[root@vmax0105 test_shell]# echo "a;b;c" | xargs -d ';'
a b c

结合-n选项,可以将输入分割成多行,每行包含两个单词: 

[root@vmax0105 test_shell]# echo "a;b;c" | xargs -d ';' -n 2
a b
c
4、输出命令前询问是否执行
-p 选项:输出要执行的命令前,询问是否执行。输入y才继续执行,否则不执行。
[root@vmax0105 test_shell]# echo "a;b;c" | xargs -p -d ';'
echo a b c
 ?...y
a b c

5、输出指定字符之前的参数

-E 选项:该选项指定一个字符串,当xargs解析出多个命令行参数的时候,如果搜索到-e指定的命令行参数,则只会将-e指定的命令行参数之前的参数(不包括-e指定的这个参数)传递给xargs后面的命令

[root@vmax0105 test_shell]# echo "a b c" | xargs -E 'b'
a

注意:-E只有在xargs不指定-d的时候有效,如果指定了-d则不起作用,而不管-d指定的是什么字符,空格也不行。

 
-0 选项表示以 '' 为分隔符,一般与find结合使用
[root@vmax0105 test_shell]# find . -name "*.txt"
./file.txt
./b.txt
./a.txt
[root@vmax0105 test_shell]# find . -name "*.txt" -print0 | xargs -0
./file.txt ./b.txt ./a.txt
[root@vmax0105 test_shell]# find . -name "*.txt" -print0 | xargs -d ""
./file.txt ./b.txt ./a.txt

默认情况下find的输出结果是每条记录后面加上换行,也就是每条记录是一个新行。加上 -print0 参数表示find输出的每条结果后面加上 '' 而不是换行。

xargs的 -0 和 -d '' 表示其从标准输入中读取的内容使用 '' 来分割,由于 find 的结果是使用 '' 分隔的,所以xargs使用 '' 将 find的结果分隔之后得到3个参数:file.txt a.txt b.txt

-i 选项

xargs和find是一对非常好的组合。

https://www.jb51.net/article/114263.htm

待完善...

 
原文地址:https://www.cnblogs.com/lfjn/p/11389231.html