学派吧-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

相关推荐

  • 宝塔微擎开启redis缓存实战教程

    各位看官大家牛年大吉,继上年做了一期微擎开启redis缓存实战教程,有小伙伴们私信或者发帖说能不能提供一篇基于端口多实例的教程,满足!开门见山,风生水起基于多端口实现redis多实例:1、打开面板安装redis,并配置好使用的最大内存,我的机器配置是4G内存,这里选择了512M内存供redis使用,配置好后重启redis(如果是生产环境,请自己斟酌是否可以重…

    2021年5月30日
    2.9K00
  • Linux中RedHat下安装Python2.7开发环境的详细教程-学派吧-

    这篇文章主要为大家详细介绍了Linux RedHat下安装Python2.7、pip、ipython环境、eclipse和PyDev环境,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 Linux RedHat下安装Python2.7、pip、ipython环境、eclipse和PyDev环境 准备工作,源Python2.6备份: 根据which pyth…

    2019年1月1日
    2.7K00
  • php-fpm 占用资源如何检查和php-fpm的解决

    1.别的先不管,先top看一下cpu、ram、swap哪个比较紧张。由上图分析,可以看出共有602个进程,其中有601个进程休眠了。这好像有点不对劲,内核进程也就80个左右,加上memcached, nginx, mysqld,也不会超出90个。除了这些,剩下的只有php-fpm管理的php-cgi,难道是…?CPU显示,CPU压力并不大,可以说没有压力。我…

    2018年8月16日
    3.2K00
  • win2008 R2设置IP安全策略后在服务器内打开网站很慢或无法访问外部网站的原因-windows教程-学派吧

    这篇文章主要介绍了win2008 R2设置IP安全策略后在服务器内打开网站很慢或无法访问外部网站的原因,需要的朋友可以参考下 win2008R2设置IP安全策略后在服务器内打开网站很慢速度只有几KB的原因 是因为IP安全策略中的关闭策略中设置了原地址“任何IP”到目标地址“任何IP”的UDP任何端口都关闭; 修改为原地址“我的IP地址”到目标地址“任何IP”…

    服务器运维 2018年12月2日
    2.8K00
  • 在Ubuntu下压缩与解压各种文件的命令使用方法

    系统命令五花八门、很多新手朋友并不熟悉怎么通过命令来进行网站打包。 今天给大家分享下 最新腾讯云活动 助力企业开工 1核2G 1M 云服务器 一年99 sudo tar zcvf work.tar.gz work/ 以tar.gz的格式将word目录打包 sudo tar jcvf work.tar.bz2 work/ sudo tar cvf work.t…

    2020年3月10日
    3.6K00

发表回复

登录后才能评论
联系我们

联系我们

18838889666

在线咨询: QQ交谈

邮件:xinyun@88.com

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

添加微信
添加微信
分享本页
返回顶部
---------官方优惠叠加渠道折扣:通过我们购买腾讯云/阿里云,价格更低,服务更优。更有专业配置指导与服务。微信同步:18838889666----