Linux shell 脚本攻略学习笔记4

18 篇文章 0 订阅

xargs:

  该xargs出场了,它擅长将标准输入数据转换成命令行参数。 xargs能够处理stdin并将其转换为特定命令的命令行参数。xargs也可以将单行或者多行文本输入转换为其他格式,例如单行变多行,多行变单行。

  例1:将多行输入转换成单行输出。

   

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

   指定每行最大的参数数量n,我们可以将任何来自stdin的文本划分成多行,每行n个参数。每一行参数都是由"  "隔开的字符串。空格是默认的定界符。下面的方法可以将单行划分成多行:

       

 来看看 xargs的其他用法:

    (1):可以用自己的定界符来分割参数。用-d 选项为输入指定一个定制的定界符:

   

   在上面的代码中,stdin是一个包含了多个X字符的字符串。我们可以用-d 将X作为输入定界符。在这里,我们明确指定X作为输入定界符,而在默认情况下 , xargs默认采用内部字段分割(空格) 作为定界符。

  再结合-n选项,我们可以将输入划分成多行,而每行包含2个参数:
 

 (2):将格式化或者自定义的参数传递给脚本:

    首先写一个简单的脚本 cecho.sh,它的作用是将命令行参数打印出来,并以#字符打印出来作为结尾,脚本如下:

#!/bin/bash

echo $* '#'

我们尝试运行它:


正是我们预期的结果。假如 有一个包含着参数列表的文件args.txt(每行一个参数)。我们需要用两种将这些参数传递给一个命令(cecho.sh)。第一种方法,需要每次提供一个参数:

./ cecho.sh args1
./ cecho.sh args2
./ cecho.sh args3 
或者,每次需要提供两个或三个参数。提供三个参数是,它看起来像这样:

./ cecho.sh arg1 arg2
./ cecho.sh arg3
第二种方法,需要一次性提供所有的命令参数:

./cecho.sh arg1 arg2 arg3

上面的问题也可以用xargs来解决,我们有一个名为args.txt的参数列表文件,这个文件内容如下:


就第一个问题,我们可以将这个命令执行多次,每次使用一个参数:


每次执行需要X个参数的命令时,使用:

INPUT |xargs -n X
例如:


就第二个问题,为了在执行命令是一次性提供所有的参数,可以使用:


(3):结合find 使用 xargs

  例1:

  用find匹配并列出所有".txt"文件,然后用xargs将这些文件删除:

$ find . -type f -name "*.txt" -print0 | xargs -0 rm -f
这样就可以删除所有.txt文件。xargs -0将 \0作为输入定界符。

   例2:

  统计所有C程序文件的行数,是大多数程序员都会遇到的任务,完成这项任务的代码:

$ find source_code_dir_path -type f -name "*.c" -print0 |xargs -0 wc -l

先到这。下一次学习命令tr的详细操作。。
 


  








  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值