zoukankan      html  css  js  c++  java
  • linux命令之玩转xargs

    linux命令之玩转xargs

    我们可以用管道将一个命令的标准输出重定向到另一个命令的标准输出,但是有些命令
    只能以命令行参数的形式接收数据,而无法接受通过stdin的数据,这个时候我们就要用到xargs。

    xargs应该紧跟管道操作符之后。

    1.将多行转换为单行,将单行转换为多行。

    [root@localhost 桌面]# cat show.txt 

    wang

    Hunan Chenzhou

    123456

    li

    Guangzhou Zhuhai

    654321

    [root@localhost 桌面]# cat show.txt | xargs

    wang Hunan Chenzhou 123456 li Guangzhou Zhuhai 654321

    [root@localhost 桌面]# cat show.txt | xargs -n 4

    wang Hunan Chenzhou 123456

    li Guangzhou Zhuhai 654321

    2.定界符,使用-d 选项

    [root@localhost 桌面]# cat show.txt | xargs -d " "

    wang Hunan Chenzhou 123456  li Guangzhou Zhuhai 654321 

    3.读取stdin,将格式化参数传递给命令(一个或多个)

    [root@localhost 桌面]# vi ceshi.sh

    #!/bin/bash

    echo $*'OK'

    [root@localhost 桌面]# chmod +x ceshi.sh 

    [root@localhost 桌面]# cat show.txt | xargs -n 1 ./ceshi.sh 

    wangOK

    HunanOK

    ChenzhouOK

    123456OK

    liOK

    GuangzhouOK

    ZhuhaiOK

    654321OK

    [root@localhost 桌面]# cat show.txt | xargs ./ceshi.sh 

    wang Hunan Chenzhou 123456 li Guangzhou Zhuhai 654321OK

    4.传递复杂的命令参数(可变,不可变参数)-I选项替换字符

    [root@localhost 桌面]# cat show.txt | xargs -I {} ./ceshi.sh -p {} -1

    -p wang -1OK

    -p Hunan Chenzhou -1OK

    -p 123456 -1OK

    -p li -1OK

    -p Guangzhou Zhuhai -1OK

    -p 654321 -1OK

    5.xargs结合其他命令的用法

    [root@localhost 桌面]# file * | grep show | cut -d ":" -f1 | xargs wc -l

    8 show.txt

    [root@localhost 桌面]$ file * | grep show | cut -d ":" -f1 |xargs -t wc -l

    wc -l show.txt 

    8 show.txt

    -t选项,先打印命令,然后再执行

    [root@localhost 桌面]# file * | grep show | cut -d ":" -f1 | xargs vi    打开vi编辑器

    [root@localhost 桌面]# file * | grep show | cut -d ":" -f1 | xargs -t -i mv {} {}.bak

    mv show.txt show.txt.bak 

    修改名字

    [root@localhost 桌面]$ find . -name "*.txt" -type f -print0 | xargs -0 tar -zcvf text.tar.gz

    查找所有txt文件,并压缩它们。

    其实xargs可以接很多命令,发现它们你会觉得非常有趣。

  • 相关阅读:
    String StringBuffer StringBuilder 三者的区别
    叶正盛:再次写给我们这些浮躁的程序员
    ubuntu中eclipse无法识别android手机问题
    Android 源代码结构
    sqlite3_open_v2(“/data/data/com.android.packagename/databases/dump.sqlite”, &handle, 1, NULL) failed
    新浪天气预报API
    在Android上常用的定时器 AlarmManager
    [转]#ifdef __cplusplus与extern "C"的解释
    [转]char *p="1234567890"以及C/C++的内存
    C语言中,为什么字符串可以赋值给字符指针变量
  • 原文地址:https://www.cnblogs.com/out8/p/4233570.html
Copyright © 2011-2022 走看看