zoukankan      html  css  js  c++  java
  • Linux命令 xargs

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

    一、对接收到的数据进行格式化

    1、将多行输入转换成单行输出

    [zhuwan@client01 linux]$ cat example.txt
    1 2 3 4 5 6
    7 8 9 10
    11 12
    [zhuwan@client01 linux]$ cat example.txt | xargs
    1 2 3 4 5 6 7 8 9 10 11 12

    2、将单行输入转换成多行输出,将任何来自stdin的文本划分成多行,每行n个参数,空格为默认定界符

    [zhuwan@client01 linux]$ cat example.txt | xargs -n 3

    1 2 3
    4 5 6
    7 8 9
    10 11 12

    3、-d选项为输入指定一个定制的定界符,默认输入定界符为空格

    [zhuwan@client01 linux]$ echo "splitXsplitXsplit" | xargs -d X
    split split split
    [zhuwan@client01 linux]$ echo "splitXsplitXsplit" | xargs -d X -n 2
    split split
    split

    二、将格式化参数传递给命令

    1、编写一个定制版echo来更好地演示xargs提供命令行参数的方法

    [zhuwan@client01 xargs]$ cat cecho.sh
    #!/bin/bash
    #filename:cecho.sh

    echo $*'#'
    [zhuwan@client01 xargs]$ ./cecho.sh arg1 arg2
    arg1 arg2#
    当参数被传递给文件cecho.sh后,它会将这些参数打印出来,并以#结尾
    思考这样一个问题:有一个包含参数列表的文件,需要将这些参数传递给一个命令(如cecho.sh),每次需要提供1个参数或2个参数或全部参数,使用xargs可以解决这个问题
    1.1、传递一个参数
    [zhuwan@client01 xargs]$ cat args.txt | xargs -n 1 ./cecho.sh
    arg1#
    arg2#
    arg3#
    1.2、传递两个参数
    [zhuwan@client01 xargs]$ cat args.txt | xargs -n 2 ./cecho.sh
    arg1 arg2#
    arg3#
    1.3、传递所有参数
    [zhuwan@client01 xargs]$ cat args.txt | xargs ./cecho.sh
    arg1 arg2 arg3#

    再思考这样一个问题:我们除了文件中的参数外,还需要一些固定不变的命令参数,格式为 ./cecho.sh -p arg1 -l

    xargs有一个 -I 选项, -I 可以指定替换字符串,这个字符串在xargs扩展时会被替换掉,需要注意的是, -I 参数使用时,命令会循环执行每一行参数,-n参数将会失效

    [zhuwan@client01 xargs]$ cat args.txt | xargs -I {} ./cecho.sh -p {} -l
    -p arg1 -l#
    -p arg2 -l#
    -p arg3 -l#

    2、xargs和find是一对死党,但使用过程中,如下的做法要注意,有可能会删除不必要删除的文件,若文件中包含空格符,xargs很可能会将它认定为定界符

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

    举例如下:“he test.txt”中包含空格符,xargs将此空格符当做了定界符,传递给后面的命令是无法找到文件“he test.txt”

    [zhuwan@client01 xargs]$ find . -type f -name "*.txt" -print
    ./example.txt
    ./args.txt
    ./args2.txt
    ./he.txt
    ./he test.txt

    [zhuwan@client01 xargs]$ find . -type f -name "*.txt" | xargs ls -l
    ls: cannot access ./he: No such file or directory
    ls: cannot access test.txt: No such file or directory
    -rw-rw-r--. 1 zhuwan zhuwan 30 Dec 16 01:24 ./args2.txt
    -rw-rw-r--. 1 zhuwan zhuwan 15 Dec 16 01:23 ./args.txt
    -rw-rw-r--. 1 zhuwan zhuwan 27 Dec 16 01:03 ./example.txt
    -rw-rw-r--. 1 zhuwan zhuwan 0 Dec 16 01:40 ./he.txt

    为了避免上述问题,就必须将-print0和find结合使用,以字符null('')来分隔输出

    [zhuwan@client01 xargs]$ find . -type f -name "*.txt" -print0 | xargs -0 ls -l
    -rw-rw-r--. 1 zhuwan zhuwan 30 Dec 16 01:24 ./args2.txt
    -rw-rw-r--. 1 zhuwan zhuwan 15 Dec 16 01:23 ./args.txt
    -rw-rw-r--. 1 zhuwan zhuwan 27 Dec 16 01:03 ./example.txt
    -rw-rw-r--. 1 zhuwan zhuwan 0 Dec 16 01:40 ./he test.txt
    -rw-rw-r--. 1 zhuwan zhuwan 0 Dec 16 01:40 ./he.txt

  • 相关阅读:
    LVS集群的ipvsadm命令用法
    opencv学习HighGUI图形用户界面初步【1】
    openc下cv::Mat和IplImage的相互转换
    QT的creator中图示
    android的数据与访问(2)-delphi xe7如何存取我的app配置参数文件?
    win7下qt+opencv的环境配置
    android的数据与访问(1)-我的app配置参数文件放在哪儿?
    xe7android调用webservice
    android.permission
    在win7下,easyphp安装过程中MSVCR110.DLL没有被指定在WINDOWS上运行,或者它包含错误
  • 原文地址:https://www.cnblogs.com/pigwan7/p/8044271.html
Copyright © 2011-2022 走看看