博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
linux命令 xargs
阅读量:4597 次
发布时间:2019-06-09

本文共 2545 字,大约阅读时间需要 8 分钟。

  xargs命令把从stdin接受到的数据重新格式化,再将其作为参数提供给其他命令

一、对接收到的数据进行格式化

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

[zhuwan@client01 linux]$ cat example.txt 

1 2 3 4 5 6
7 8 9 10
11 12
[zhuwan@client01 linux]$ cat example.txt | xargs
1 2 3 4 5 6 7 8 9 10 11 12

2、将单行输入转换成多行输出,将任何来自stdin的文本划分成多行,每行n个参数,空格为默认定界符

[zhuwan@client01 linux]$ cat example.txt | xargs -n 3

1 2 3

4 5 6
7 8 9
10 11 12

3、-d选项为输入指定一个定制的定界符,默认输入定界符为空格

[zhuwan@client01 linux]$ echo "splitXsplitXsplit" | xargs -d X

split split split
[zhuwan@client01 linux]$ echo "splitXsplitXsplit" | xargs -d X -n 2
split split
split

二、将格式化参数传递给命令

1、编写一个定制版echo来更好地演示xargs提供命令行参数的方法

[zhuwan@client01 xargs]$ cat cecho.sh 

#!/bin/bash
#filename:cecho.sh

echo $*'#'

[zhuwan@client01 xargs]$ ./cecho.sh arg1 arg2
arg1 arg2#
当参数被传递给文件cecho.sh后,它会将这些参数打印出来,并以#结尾
思考这样一个问题:有一个包含参数列表的文件,需要将这些参数传递给一个命令(如cecho.sh),每次需要提供1个参数或2个参数或全部参数,使用xargs可以解决这个问题
1.1、传递一个参数
[zhuwan@client01 xargs]$ cat args.txt | xargs -n 1 ./cecho.sh 
arg1#
arg2#
arg3#
1.2、传递两个参数
[zhuwan@client01 xargs]$ cat args.txt | xargs -n 2 ./cecho.sh 
arg1 arg2#
arg3#
1.3、传递所有参数
[zhuwan@client01 xargs]$ cat args.txt | xargs ./cecho.sh 
arg1 arg2 arg3#

再思考这样一个问题:我们除了文件中的参数外,还需要一些固定不变的命令参数,格式为 ./cecho.sh -p arg1 -l

xargs有一个 -I 选项, -I 可以指定替换字符串,这个字符串在xargs扩展时会被替换掉,需要注意的是, -I 参数使用时,命令会循环执行每一行参数,-n参数将会失效

[zhuwan@client01 xargs]$ cat args.txt | xargs -I {} ./cecho.sh -p {} -l

-p arg1 -l#
-p arg2 -l#
-p arg3 -l#

2、xargs和find是一对死党,但使用过程中,如下的做法要注意,有可能会删除不必要删除的文件,若文件中包含空格符,xargs很可能会将它认定为定界符

find . -type f -name "*.txt" -print | xargs rm -f

举例如下:“he test.txt”中包含空格符,xargs将此空格符当做了定界符,传递给后面的命令是无法找到文件“he test.txt”

[zhuwan@client01 xargs]$ find . -type f -name "*.txt" -print

./example.txt
./args.txt
./args2.txt
./he.txt
./he test.txt

[zhuwan@client01 xargs]$ find . -type f -name "*.txt" | xargs ls -l

ls: cannot access ./he: No such file or directory
ls: cannot access test.txt: No such file or directory
-rw-rw-r--. 1 zhuwan zhuwan 30 Dec 16 01:24 ./args2.txt
-rw-rw-r--. 1 zhuwan zhuwan 15 Dec 16 01:23 ./args.txt
-rw-rw-r--. 1 zhuwan zhuwan 27 Dec 16 01:03 ./example.txt
-rw-rw-r--. 1 zhuwan zhuwan 0 Dec 16 01:40 ./he.txt

为了避免上述问题,就必须将-print0和find结合使用,以字符null('\0')来分隔输出

[zhuwan@client01 xargs]$ find . -type f -name "*.txt" -print0 | xargs -0 ls -l

-rw-rw-r--. 1 zhuwan zhuwan 30 Dec 16 01:24 ./args2.txt
-rw-rw-r--. 1 zhuwan zhuwan 15 Dec 16 01:23 ./args.txt
-rw-rw-r--. 1 zhuwan zhuwan 27 Dec 16 01:03 ./example.txt
-rw-rw-r--. 1 zhuwan zhuwan 0 Dec 16 01:40 ./he test.txt
-rw-rw-r--. 1 zhuwan zhuwan 0 Dec 16 01:40 ./he.txt

 

转载于:https://www.cnblogs.com/licker/p/9429911.html

你可能感兴趣的文章
5.Python进阶_循环设计
查看>>
【NLP】揭秘马尔可夫模型神秘面纱系列文章(一)
查看>>
Android采访开发——2.通用Android基础笔试题
查看>>
UVa 442 Matrix Chain Multiplication(矩阵链,模拟栈)
查看>>
多种方法求解八数码问题
查看>>
spring mvc ModelAndView向前台传值
查看>>
(黑客游戏)HackTheGame1.21 过关攻略
查看>>
Transparency Tutorial with C# - Part 2
查看>>
android 文件上传
查看>>
ASCII 码表对照
查看>>
javascript的DOM操作获取元素
查看>>
Shuffle'm Up(串)
查看>>
微软职位内部推荐-Software Engineer II
查看>>
20145219 《Java程序设计》第06周学习总结
查看>>
C# 执行bat文件并取得回显
查看>>
基于YOLO的Autonomous driving application__by 何子辰
查看>>
javascript中的继承
查看>>
iOS-如何写好一个UITableView
查看>>
如何在Objective-C中实现链式语法
查看>>
select2 下拉搜索控件
查看>>