• Linux命令(1)——xargs命令


    1.功能:

    xargs能够将stdin中以空格或换行符进行分隔的数据。形成以空格分隔的參数(arguments),传递给其它命令。由于以空格作为分隔符,所以有一些文件名称或者其它意义的名词内含有空格的时候,xargs可能会误判。简单来说,xargs是给其它命令传递參数的一个过滤器,是构建单行命令的重要组件之中的一个。

    之所以要用到xargs,是由于由于非常多命令不支持使用管道|来传递參数,比如:

    find /sbin -perm +700 |ls -l         //这个命令是错误,由于标准输入不能作为ls的參数
    find /sbin -perm +700 |xargs ls -l   //这样才是正确的

    2.命令格式

    xargs [选项] [command]

    3.选项说明:

    -0:假设输入的stdin含有特殊字符,比如反引號`、反斜杠、空格等字符时。xargs能够将它还原成一般字符。

    为xargs的默认选项。 -e <flag>,-E <flag>,--eof=<eof-str>:eof是end of file string的意思。flag能够是一个字符串或者是由空格分隔的多个字符串,当xargs分析到这个flag时,就会停止工作。

    见演示样例2。 -p:当每次运行一个argument的时候询问一次用户。 -n <num>:表示命令在运行的时候一次使用的argument的个数,由num指定,默认是用全部的參数。 -t:表示先打印命令,然后再运行。 -a <file>:从文件里读入作为sdtin。

    -i,-I:当中-I某些Linux版本号不支持。将xargs的输出每一项參数,单独赋值给后面的命令,參数需要用{}取代。

    见演示样例3。 -r:或者--no-run-if-empty,当xargs的输入为空的时候则停止xargs,不用再去运行后面的命令了。-r是xargs的默认选项。 -s <num>:命令行的最大字符数,指的是xargs后面那个命令的最大命令行字符数,包括命令、空格和换行符。

    每一个參数单独传入xargs后面的命令。见演示样例4

    -L <line_num>:设置标准输入中最大的行数作为命令每一次运行的參数。

    见演示样例5。 -d <delim>, --delimiter=<delim>: xargs处理标准输入默认是按换行符和空格作为分隔符,输出arguments的分隔符是空格,这里改动xargs处理标准输入时的分隔符。 -x:eXit的意思,主要是配合-s使用,当命令行字符数大于-s指定的数值时。退出xargs。

    -P:改动最大的进程数,默认是1,为0时候为as many as it can。该选项比較少用。眼下还不清楚该使用方法。

    4.使用方法演示样例

    (1)将shell的特殊字符还原为一般字符。

    [b3335@MIC ~]$ echo '`0123`4 56789'|xargs -t echo
    echo `0123`4 56789 
    `0123`4 56789

    假设直接进行例如以下操作。会报无法找到命令01234的错误,由于反引號在shell中会将01234作为一个命令来运行,可是01234不是一个命令。-t表示先打印命令,然后再运行。

    [b3335@MIC ~]$ echo `01234` 56789
    -bash: 01234: command not found
    56789

    (2)设置xargs读入參数时的结束标识,以逗号结束。这里要注意结束标志必需要是单独的字段,即以空格或者换行符分隔的字段。

    [b3335@MIC ~]$ echo 01234 , 56789|xargs -E ","
    01234

    (3)将当前文件夹的全部文件加入后缀名。

    ls | xargs -t -i mv {} {}.bak

    (4)设置命令行的最大字符数。參数默认一个一个单独传入命令中运行。

    [b3335@MIC test]$ echo "01234 56789"|xargs -t -s 11
    echo 01234 
    01234
    echo 56789 
    56789

    (5)设置标准输入中每次多少行作为命令的參数。默认是将标准输入中全部行的归并到一行一次性传给命令运行。

    [b3335@MIC test]$ echo -e "01234
    56789
    01234" | xargs -t -L 2 echo  
    echo 01234 56789 
    01234 56789
    echo 01234 
    01234

    (6)将文件内容以空格分隔同行输出。

    //列出文件内容
    cat test.txt
    a b c d e
    f g h i j 
    k l m n o
    
    //多行输入单行输出: 
    cat test.txt | xargs
    a b c d e f g h i j k l m n o

    (7)与ps、grep、awk和kill结合,强制终止指定进程

    ps -ef|grep spp|awk '{printf "%s ",$2}'|xargs kill -9

    命令解释:
    ps -ef|grep spp用于查找包括spp的进程,awk '{printf "%s ",$2,FNR}将目标进程ID打印输出,xargs kill -9则将目标进程ID作为參数传递给kill -9用于杀死进程。


    參考文献

    [1]Xargs使用方法具体解释

  • 相关阅读:
    openpose_caffe_to_rknn.py
    ncnn的完整编译过程
    We Need More Bosses CodeForces
    Yet Another Problem On a Subsequence CodeForces
    牛客 82E 无向图中的最短距离 (bitset,bfs)
    Largest Submatrix 3 CodeForces
    bzoj 4245 [ONTAK2015]OR-XOR (贪心)
    BZOJ 2836 魔法树 链剖裸题~~
    BZOJ 3083 遥远的国度 树链剖分+脑子
    Luogu P1471 方差 线段树
  • 原文地址:https://www.cnblogs.com/jzssuanfa/p/7397188.html
Copyright © 2020-2023  润新知