命令行随笔

1、xargs

xargs命令是将 前一个命令的标准输出作为后一个命令的命令行参数,xargs的默认命令是echo,默认定界符是空格和回车。

而管道是将 前一个命令的标准输出作为后一个命令的标准输入

echo例子

bash 复制代码
# echo "apple banana orange" | xargs echo "I like"
I like apple banana orange

find例子

bash 复制代码
# find . -name "*.txt" | xargs rm

find . -name "*.txt"命令用于查找当前目录下的所有以".txt"为扩展名的文件,并将结果通过管道传递给了xargs命令。xargs命令将每个文件名作为参数传递给rm命令,从而批量删除了这些文件。

-d自定义分隔符
bash 复制代码
# echo '11@22@33' | xargs
'11@22@33'
# echo '11@22@33' | xargs -d @
'11 22 33'
-n指定参数数量
bash 复制代码
# echo '11@22@33@44@55@66@77@88@99@00' | xargs -d '@' -n 3 echo
11 22 33
44 55 66
77 88 99
00

每次传递几个参数给其后面的命令执行,如果xargs从标准输入中读入内容,然后以分隔符分割之后生成的命令行参数有10个,使用 -n 3 表示一次传递给xargs后面的命令是3个参数,因为一共有10个参数,所以要执行4次,才能将参数用完。

-E指定结尾
bash 复制代码
# echo '11 22 33' | xargs -E 33 echo
11 22

当xargs解析出多个命令行参数的时候,如果搜索到-e指定的命令行参数,则只会将-e指定的命令行参数之前的参数(不包括-e指定的这个参数)传递给xargs后面的命令。

注意:-d 和 -E不能同时使用。

-i多次接受输入,默认是{}作为占位符
bash 复制代码
# ls logdir/ | xargs -i mv ./logdir/{} ./logdir/{}.bak

重命名时在每个传递过来的文件名加上后缀.bak,这需要两个参数位。

将不同列作为不同的参数传入

input.txt内容

bash 复制代码
1 2 3
4 5 6
7 8 9

script.sh脚本

bash 复制代码
#!/bin/bash
echo "First column: $1"
echo "Second column: $2"
echo "Third column: $3"

运行shell脚本

bash 复制代码
cat input.txt | awk '{print $0}' | xargs -n 3 ./script.sh

执行结果

bash 复制代码
First column: 1
Second column: 2
Third column: 3
First column: 4
Second column: 5
Third column: 6
First column: 7
Second column: 8
Third column: 9
相关推荐
霍夫曼42 分钟前
UTC时间与本地时间转换问题
java·linux·服务器·前端·javascript
2301_810746311 小时前
CKA冲刺40天笔记 - day20-day21 SSL/TLS详解
运维·笔记·网络协议·kubernetes·ssl
❀͜͡傀儡师1 小时前
docker 部署 komari-monitor监控
运维·docker·容器·komari
物联网软硬件开发-轨物科技1 小时前
【轨物方案】软硬件一体赋能,开启矿山机械远程智慧运维新篇章
运维
月熊1 小时前
在root无法通过登录界面进去时,通过原本的普通用户qiujian如何把它修改为自己指定的用户名
linux·运维·服务器
大江东去浪淘尽千古风流人物2 小时前
【DSP】向量化操作的误差来源分析及其经典解决方案
linux·运维·人工智能·算法·vr·dsp开发·mr
打码人的日常分享3 小时前
智慧城市一网统管建设方案,新型城市整体建设方案(PPT)
大数据·运维·服务器·人工智能·信息可视化·智慧城市
赖small强3 小时前
【Linux驱动开发】NOR Flash 技术原理与 Linux 系统应用全解析
linux·驱动开发·nor flash·芯片内执行
风掣长空3 小时前
Google Test (gtest) 新手完全指南:从入门到精通
运维·服务器·网络
luback4 小时前
前端对Docker简单了解
运维·docker·容器