shellNote--day17

shellNote

day17

xargs简要介绍

  • xargs命令

    可以用来构建执行来自标准输入或管道输入的命令;

    • 选项-d

      指定分隔符

    • 选项-n

      指定每次传递参数个数;

    例子:

    COMMAND_1="ps -u $USER_ACCOUNT --no-heading"	
    \\USER_ACCOUNT表示用户账户的名字,--no-heading去掉信息头,该命令获取用户正在运行的进程信息;
    
    gawk '{print $1}' 
    \\输出上一条命令的第一个字段,也就是该用户的进程pid;
    
    COMMAND_2="xargs -d \\n /usr/bin/sudo /usr/bin/kill -9" 
    \\由于gawk输出的是\n分隔的参数,所以指定分隔符为\n,后一条命令为终止进程;
    
    \\完整命令:
    COMMAND_1 | gawk 'print $1' | COMMAND_2
    

    可以把xargs理解为协助其他命令的中间角色,将其从STDIN读取的内容作为其他命令的参数;

    默认命令为echo,默认分隔符为空格;

    $ cat data
    a b c
    d e f g
    h i j
    $ cat data | xargs
    a b c e f g h i j
    $
    $ cat data | xargs -n 3 //-n 指定参数个数
    a b c
    d e f
    g h i
    j
    $ echo "a*b*c*d*e" | xargs -d * -n 4 //-d 指定分隔符
    a b c d 
    d e 
    
    • -I或-i选项

      将STDIN的每一行赋值给{},然后将{}作为参数传递给其他命令;

      $ cat data
      a b c d 
      1 2 3 4 
      hello
      world
      $ cat data | xargs -I {} echo {}
      a b c d
      1 2 3 4
      hello
      world
      # cat | data | xargs echo
      a b c d 1 2 3 4 hello world
      # cat data | xargs -i echo {}
      a b c d
      1 2 3 4
      hello
      world
      $	
      
    • -0选项

      一般是与find命令配合使用时使用-0选项;

      find命令查找文件时,会有文件名中带空格的文件,这样直接传递给xargs,会将一个文件当做两个参数来处理,肯定是不对的;

      那么这个时候,-0选项,指定null作为分隔符;

      find的-print0选项,指定输出以null作为分隔符;

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值