• xargs命令的基本用法


    xargs命令的基本用法

    作用

    对于某些命令,只能以命令行参数的形式接受数据,而无法通过stdin接受数据流。这种情况下,没有办法通过管道给那些只能接受命令行参数的命令提供数据。而管道只适用于能接受stdin作为数据流的命令。
    xargs命令应该紧跟在管道操作符之后,以标准输入作为主要的源数据,使用stdin作为命令行参数来执行其他命令。

    用法

    xargs命令常用的选项(命令行参数)有:

    -n column :  指定输出列数
    -d flag : 为数据源指定定界符,分割数据源
    -I {} : 将数据源转换后放置在指定位置
    
    • 1
    • 2
    • 3

    当xargs不指定-n column 选项时,那么xargs会将stdin传过来(管道符实现)的源数据转换成一行,并且每个参数由空格隔开,而如果指定-n选项那么就会将源数据分成后面数字对应的列数,同样每个参数都是由空格进行分割。例如:
    1) xargs的一般使用

    # example.txt
    1 2 3 4
    5 6 7
    8 9
    # 将数据源转换成1行
    cat example.txt | xargs 
    1 2 3 4 5 6 7 8 9
    # 将数据源转换成2列输出
    cat example.txt | xargs -n 2
    1 2 
    3 4 
    5 6
    7 8 
    9
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    2)定界符的使用

    # 使用X分割数据源,由于xargs处理以后都是以空格作为定界符分割结果
    echo "splitXsplitXsplitXsplit" | xargs -d X
    split split split split
    
    • 1
    • 2
    • 3

    3)高阶使用
    1.读取stdin,将格式化参数传递给命令

    # 测试脚本 ceshi.sh
    #!/bin/bash
    echo $* '#'
    
    # args.txt
    arg1
    arg2
    arg3
    
    ## 读取stdin,将格式化参数传递给命令
    cat args.txt | xargs -n 2 ./ceshi.sh
    arg1 arg2 #
    arg3 #
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    2.将数据源放置在特定位置

    例如,希望以如下形式将数据源提供给命令:
    ./ceshi.sh -p arg1 -a
    ./ceshi.sh -p arg2 -a
    ./ceshi.sh -p arg3 -a
    
    • 1
    • 2
    • 3
    • 4

    即需要将参数指定放在-p选项后,此时又该如何使用xargs命令呢?
    当需要转换stdin源数据到特定命令行位置时,可以使用xargs命令的-I选项,在-I选项后指定占位符,然后在特定选项后使用该占位符,就表示将从stdin转换的数据将被放置在该位置。例如

    cat args.txt | xargs -I {}  ./ceshi.sh -p {} -a
    # 下面的命令和上面的命令效果一样,却指定了另一个占位符,
    cat args.txt | xargs -I []  ./ceshi.sh -p [] -a
    
    • 1
    • 2
    • 3
    1. 和find一起使用
      这里提供几个简单的示例。
    # 1.删除当前目录txt结尾的文件
    find . -type f -name "*.txt" | xargs rm -f 
    
    # 2.统计当前目录各文件的行数
    find . -type f -name "*.txt" | xargs wc -l 
    # 等同于下面的命令
    find . -type f -name "*.txt" -exec wc -l {} \;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
  • 相关阅读:
    Operating System Hands on Experiment-4
    java基础(面向对象,异常,类,抽象类,继承类,构造方法,接口,string类,==和equals,修饰符final,static,重写和重载)
    操作系统——信号
    java第二十六课 —— java动态绑定机制 | 多态的应用(一)
    vue3项目的创建和配置文件
    漫谈广告机制设计 | 混排:广告与自然结果的交锋博弈(2)
    numpy和torch函数使用
    简述paxos算法
    C语言——文件操作函数 fseek、ftell、rewind详解
    码率vs.分辨率,哪一个更重要?
  • 原文地址:https://blog.csdn.net/Chaolei3/article/details/125529040