xargs格式化输出



从标准输出建立并运行命令行

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


------------------------------------------------ xargs 选项:
-d 选项 :为输入指定一个定制的定界符

-p 选项 ;它使操作具有可交互性:
命令: file * | grep ASCII | cut -f1 -d: | xargs -p vi
此处的 xarg 要求您在运行每个命令之前进行确认。如果您按下 "y",则执行命令。


-t 选项 ;使用一个详细模式,显示要运行的命令,是调试过程中一个非常有帮助的选项。
如果传递给 xargs 的输出为空怎么办?考虑以下命令:
命令:file * | grep 12345 | cut -f1 -d: | xargs -t wc -l
wc -l
0

此处,搜索 "12345" 后没有匹配的内容;因此 xargs 的输入均为空,如第二行所示(由于我们使用 -t 这个详细选项而产生的结果)。

-r 选项 ;虽然这可能会有所帮助,但在某些情况下,如果没有要处理的内容,您可能希望停止 xargs;如果是这样,可以使用 -r 选项:
命令: file * | grep 12345 | cut -f1 -d: | xargs -t -r wc -l
如果没有要运行的内容,该命令退出。


-n 选项 ;修改单个命令行传递的参数个数。例如我们即使向 xargs ls -ltr 传递五个文件,但每次向 ls -ltr 仅传递两个文件。
命令:file * | grep ASCII | cut -f1 -d: | xargs -t -n2 ls -ltr

 

 

 

 

 

 

 

将多行输入转换为单行输出:

#cat example.txt

1 2 3 4 5 6

7 8 9 10

11 12

#cat example.txt | xargs

 

将单行输入转换成多行输出:

#cat example.txt | xargs -n 3

 

1 2 3

4 5 6

....

 

 

根据定界符格式化输出:

#echo "splitXsplitXsplitXsplit" | xargs -d X -n 2

split split

split split

 

-n 2表示一行2个记录(2列)

 

---------------------------------------------  实例


example1


描述:输出当前目录下所有符号链接或经过压缩的ASCII文件并显示

命令:file -Lz * | grep ASCII | cut -f1 -d: | xargs ls -ltr

解释:

file -Lz *:用于查找是符号链接或者经过压缩的文件;

输出结果:

anaconda-ks.cfg: ASCII English text

install.log: ASCII text

insall.log.syslog: ASCII text

mbox: ASCII mail text

grep ASCII:用于搜索包含 "ASCII" 字符的字符串并产生;

输出结果:

anaconda-ks.cfg: ASCII English text

install.log: ASCII text

insall.log.syslog: ASCII text

mbox: ASCII mail text

cut -f1 -d:表示采用冒号作为分隔符,并取出第一列。所以尽显示文件名;

输出结果:
anaconda-ks.cfg

install.log

install.log.syslog

mbox

xargs:将上述列表作为参数进行传递,一次传递一个。

xargs ls -ltr:用于接收输出并对其执行 ls -ltr 命令,命令等价于:


ls -ltr anaconda-ks.cfg


ls -ltr install.log


ls -ltr install.log.syslog


ls -ltr mbox


结果:

大家应该都知道了吧。

xargs 本身虽然没有多大用处,但在与其他命令相结合时,它的功能非常强大。


example2

描述:计算当前目录下各个文件行数:

命令:file * | grep ASCII | cut -f1 -d: | xargs wc -l

解释:(无)

结果:

40 anaconda-ks.cfg

452 install.log

53 install.log.syslog

68 mbox

613 total


example3

描述:用vi打开匹配后的文件

命令:file * | grep ASCII | cut -f1 -d: | xargs vi

解释:

该命令使用 vi 逐个打开文件。当您希望搜索多个文件并打开它们进行编辑时,使用该命令非常方便。

example4

描述:快速重命名目录中的文件。

命令:ls | xargs -i mv {} {}.old

解释:

-i 选项告诉 xargs 用每项的名称替换 {}。

 

 

 

-----------------------------------------find 与exec xargs  是常用组合

 

传送

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值