学派吧-linux中xargs命令技巧的各种使用详解-linux教程

xargs是给命令传递参数的一个过滤器,也是组合多个命令的一个工具。下面这篇文章主要给大家介绍了关于linux中xargs命令用法的相关资料,需要的朋友可以参考借鉴,下面来跟着小编一起看看吧。

前言

xargs命令是把接收到的数据重新格式化,再将其作为参数提供给其他命令,下面介绍xargs命令的各种使用技巧,一起来看看吧。

一、将多行输入转换成单行输入:

[root@host1 test]# echo -e "1 2 3 4 5 \n6 7 8 \n9 10 11 12" >example.txt
[root@host1 test]# cat example.txt 
1 2 3 4 5 
6 7 8 
9 10 11 12
[root@host1 test]# cat example.txt |xargs 
1 2 3 4 5 6 7 8 9 10 11 12

将单行输入转换成多行输出:

[root@host1 test]# cat example.txt | xargs -n 3
1 2 3
4 5 6
7 8 9
10 11 12

自定义定界符进行转换(默认的定界符是空格):

[root@host1 test]# echo "Hello:Hello:Hello:Hello" | xargs -d : -n 2
Hello Hello
Hello Hello

二、在脚本中运用:

[root@host1 test]# cat echo.sh 
#!/bin/bash
echo $* '^-^'

当参数传递给echo.sh后,它会将这些参数打印出来,并且以"^-^"作为结尾:

[root@host1 test]# echo -e "Tom\nHarry\nJerry\nLucy" > args.txt
[root@host1 test]# cat args.txt | xargs bash echo.sh 
Tom Harry Jerry Lucy ^-^
[root@host1 test]# cat args.txt | xargs -n 2 bash echo.sh 
Tom Harry ^-^
Jerry Lucy ^-^

在上面的例子中,我们把参数源都放入args.txt文件,但是除了这些参数,我们还需要一些固定不变的参数,比如:

[root@host1 test]# bash echo.sh Welcome Tom 
Welcome Tom ^-^

在上述命令执行过程中,Tom是变量,其余部分为常量,我们可以从"args.txt"中提取参数,并按照下面的方式提供给命令:

[root@host1 test]# bash echo.sh Welcome Tom 
[root@host1 test]# bash echo.sh Welcome Herry
[root@host1 test]# bash echo.sh Welcome Jerry
[root@host1 test]# bash echo.sh Welcome Lucy

这时我们需要使用xargs中-I命令:

[root@host1 test]# cat args.txt | xargs -I {} bash echo.sh Welcome {} 
Welcome Tom ^-^
Welcome Harry ^-^
Welcome Jerry ^-^
Welcome Lucy ^-^

-I {} 指定替换字符串,对于每一个命令参数,字符串{}都会被从stdin读取到的参数替换掉,

使用-I的时候,命令以循环的方式执行,如果有4个参数,那么命令就会连同{}一起被执行4次,在每一次执行中{}都会被替换为相应的参数。

三、结合find使用

xargs和find是一对非常好的组合,但是,我们通常是以一种错误的方式运用它们的,比如:

[root@host1 test]# find . -type f -name "*.txt" -print | xargs rm -f

这样做是有危险的,有时会删除不必删除的文件,如果文件名里包含有空格符(' '),则xargs很可能认为它们是定界符(例如,file text.txt会被xargs误认为file和text.txt)。

如果我们想把find的输出作为xargs的输入,就必须将-print0与find结合使用以字符null('\0')来分隔输出,用find找出所有.txt的文件,然后用xargs将这些文件删除:

[root@host1 test]# find . -type f -name "*.txt" -print0 | xargs -0 rm -f

这样就可以删除所有的.txt文件了,xargs -0 将\0作为输入定界符。

四、运用while语句和子shell

[root@host1 test]# cat files.txt | (while read arg ;do cat $arg;done)

这条命令等同于:

[root@host1 test]# cat files.txt | xargs -I {} cat {}

在while循环中,可以将cat $arg替换成任意数量的命令,这样我们就可以对同一个参数执行多条命令,也可以不借助管道,将输出传递给其他命令,这个技巧适应于多种问题场景。子shell操作符内部的多个命令可作为一个整体来运行。

总结

以上就是linux中xargs命令技巧的各种使用详解的详细内容,更多请关注学派吧其它相关文章!

主题测试文章,只做测试使用。发布者:云大使,转转请注明出处:https://www.xp8.net/server/2758.html

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 2018年12月19日 下午9:49
下一篇 2018年12月19日 下午9:49

相关推荐

  • 学派吧-linux/centos下zip文件解压出现乱码怎么办?-linux教程

    本篇文章主要介绍了解决linux下zip文件解压乱码问题,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。 原因 由于zip格式并没有指定编码格式,Windows下生成的zip文件中的编码是GBK/GB2312等,因此,导致这些zip文件在Linux下解压时出现乱码问题,因为Linux下的默认编码是UTF8。 解决方案一 使用7z解压。 安装p7zip和c…

    服务器运维 2018年12月12日
    2.2K00
  • 腾讯云阿里云服务器centso使用mv命令移动文件夹及其下所有文件

    centos 系统现在用户已经慢慢普及、第三方面板也很多,碰到大量数据的目录转移  还是需要在命令界面操作 比较快 。 mv命令来为文件或目录改名或将文件由一个目录移入另一个目录中。该命令等同于DOS系统下的ren和move命令的组合。它的使用权限是所有用户。 格式: mv [选项(option)] 源文件或目录 目标文件或目录 使用命令: mv webda…

    2021年3月15日
    2.7K00
  • Nginx、FPM配置及优化教程说明-学派吧 linux运维

    Nginx配置 main模块 events 模块 http模块 sendfile keepalive 超时 map proxy openfile client buffer Gzip fastcgi cache server模块 正则 Rewrite 文件缓存 FPM HTTPS upstream模块 默认轮询(加权) 最小连接数 IP Hash FPM配置…

    服务器运维 2018年10月11日
    3.6K00
  • linux监控工具如何使用?总结监控工具实例用法教程-学派吧

    如果您有服务器咨询问题、购买问题、可以联系我们客服 7271895 690624商祺云-阿里代理、景安代理、西部代理 1、nethogs1)NetHogs是一款开源、免费的,终端下的网络流量监控工具,它可监控Linux的进程或应用程序的网络流量。NetHogs只能实时监控进程的网络带宽占用情况。NetHogs支持IPv4和IPv6协议,支持本地网卡以及PPP…

    2019年1月14日
    2.8K00
  • nginx 和 frp共用80端口教程

    之前用frp做内网穿透,把内网的服务器开放到外网。 如果是http服务的话,80端口的做法是使用二级域名xxx做个A记录指一台没有nginx 之类的服务器IP,然后用浏览器打开xxx.example.com就打开了。其他端口是在frpc.ini里指定的,就加个端口号如xxx.example.com:1234就打开了,这种情况用于外网服务器已经有nginx在运…

    服务器运维 2018年10月16日
    5.2K00

发表回复

登录后才能评论
联系我们

联系我们

18838889666

在线咨询: QQ交谈

邮件:xinyun@88.com

工作时间:周一至周五,9:30-18:30,节假日休息

添加微信
添加微信
分享本页
返回顶部