当前位置: 首页 > 资讯 >

xargs - Linux里好用的工具

xargs

xargs原来意思是build and execute command lines frooom standarad input(stdin)
xargs把从stdin接受到的字串, 转成後面命令的参数, 来执行後面的命令.

为什麽讲这个命令呢?
之前介绍grep、sed、awk,
grep找到的内容可以给sed、awk直接读取
但若我是取出档名, 要给後两者读取其内容呢?
这时xargs可以帮忙处理

# 搜寻txt档案内容有it的, 显示其档名
grep -l 'it' *.txt                               
> aa.txt
> python.txt

# 透过xargs将档名当成sed的参数, 来执行sed
grep -l 'it' *.txt | xargs sed -n 's/it/ithome/p'
> baseurl=https://xxx/mysql-repo/yum/mysql-5.7-communithomey/el/$releasever/$basearch
> 13Th Ithome is my favorithomee active

转个思维表示;
系统内的日志也是能grep找出来含内容的档案, 再转给awk做格式转换制作表格後,
再输出到类似kibana等等的地方做储存展示.
也能是用grep转到执行自己写的程序, 将档名当成参数.

option介绍

xargs预设是用空格做完分隔符号, 也就是说,

echo "aa.txt python.txt" | xargs sed -n 's/it/ithome/p'
> baseurl=https://xxx/mysql-repo/yum/mysql-5.7-communithomey/el/$releasever/$basearch
> 13Th Ithome is my favorithomee active

xargs会将"aa.txt python.txt"按照空格切成aa.txt、python.txt,
传给sed当参数sed -n 's/it/ithome/p' aa.txt python.txt, 然後执行.

也能指定分隔符号, 透过-ddelimiter,

# 指定@为分隔符号
echo '11@22@33' | xargs -d '@' echo         
> 11 22 33

也能指定EOF符号-E, 表示读到EOF就不会再读取字串, 也不会去执行命令
ps 但无法跟上一个-d一起混用

# 指定22为EOF, 因此33就不被读取, 22是不被拿去echo给执行去
echo '11 22 33' | xargs -E '22'  echo       
> 11

透过-tverbose, 能把要执行的命令给输出出来, 并且执行该命令

# 能看到真正要执行的命令
grep -l 'it' *.txt | xargs -t sed -n 's/it/ithome/p'   
> sed -n s/it/ithome/p aa.txt python.txt 
> baseurl=https://xxx/mysql-repo/yum/mysql-5.7-communithomey/el/$releasever/$basearch
> 13Th Ithome is my favorithomee active

透过-pinteractive, 这命令就只是一个prompt, 询问是否要执行, 输入y/Y, 就真正执行该命令
通常会跟上一个-t搭配使用

grep -l 'it' *.txt | xargs -tp sed -n 's/it/ithome/p'
# 会显示命令并且等待用户输入,  这里我输入y
> sed -n s/it/ithome/p aa.txt python.txt ?...y

> baseurl=https://xxx/mysql-repo/yum/mysql-5.7-communithomey/el/$releasever/$basearch
> 13Th Ithome is my favorithomee active

玩一下之前学到的,做组合拳
先开一个新的terminal, 挂着让它跑

ping -i 1 8.8.8.8 

再开另一个terminal
然後透过ps找到这执行中的PID, 透过xargs传给kill执行

ps -ef | grep 'ping -i' | awk '{print $2}' | xargs -t  kill -9
> kill -9 242585 242668 
> kill: (242241): No such process

执行完, 原本持续在ping的process就会收到kill讯号而被kill.
这里用到之前的grep+awk

掌握这些基本也能, 做到说像是去redis找到key, 然後再去删除key

./redis-cli -h 127.0.0.1 -p 6381 -n 1 KEYS "ithome:*" | xargs ./redis-cli -h 127.0.0.1 -p 6381 -n 1 DEL

本日小结

很多组合的操作, 其实大多都能通过xargs中间转一手来处理.
因为不是每个工具都支持pipeline的使用,
有xargs就能让这些不支持的程序, 可以使用前一个命令完成之後的结果.
真的是个很方便的工具

----参考来源
鸟哥Linux私房菜 xargs


相关文章:

  • [区块链&DAPP介绍 Day24] Dapp 实战 部署第一个 Dapp
  • [Day 14] Reverse 小入门
  • Kotlin Android 第7天,从 0 到 ML - list 、set 和 map
  • Android Studio 菜鸟笔记本-Day 30 -感言
  • 虹语岚访仲夏夜-16(打杂的Allen篇)
  • [神经机器翻译理论与实作] Google Translate的神奇武器- Seq2Seq (III)
  • Day 3: 我不想知道的太多,以免被连累.单一职责与最小知道原则
  • 30天学会C语言: Day 4-输入个资料怎麽那麽麻烦啦
  • [Day21] 你问我爱你有多深? 用Python让手指爱心超进化!
  • JS读书笔记30天 - Day27 Vue的前置工作与开发者工具
  • 《赖田捕手:番外篇》第 39 天:探索 Netlify Functions 的暂存空间
  • 【PHP Telegram Bot】Day07 - 安装 VS Code 并撰写第一支程序
  • DAY28 CNN(卷积神经网路 续二)
  • 绘图 - 即时 tick 资料
  • [30天 Vue学好学满 DAY6] 计算属性(Computed)
  • 一周要闻:谷歌母公司、Facebook、亚马逊等几大互联网公司一季度财报
  • RPA是什么?Litrpa是什么?可以做什么好用吗?
  • 海外营销周报:Facebook应用下载量下降30%,TikTok在欧洲测试应用内购买…
  • 什么是301重定向?如何在WordPress网站创建301重定向?
  • 性价比最高的国外VPS服务器推荐:便宜好用的美国VPS大全
  • 国外VPS优惠码大全:
  • 阿里云通用型NAS怎么收费的
  • VPS评测:Clouvider Limited英国VPS性能测试
  • DGCHOST稳定吗?现在还可以购买DGCHOST的服务器VPS吗
  • 自建CDN教程:如何做一个自己的CDN
  • 如何找国外网红营销?国外网红营销方法和推荐
  • Google Voice怎么转移到Lycamobile
  • 洛杉矶CN2服务器推荐:PCCW线路VPS,服务器服务商layerhost
  • 海外营销周报:谷歌产品评论算法更新,YouTube和Facebook仍是美社交媒体主流
  • 礼品卡和虚拟信用卡的区别:Prepaid Debit Card和Virtual Credit Card区别