Shell命令之xargs使用小结
常见用于管道的处理中,拿到前面的数据进行后续的处理;
xargs 以空白字符或换行作为分割,默认使用echo输出结果,且会忽略空白行,官方说明如下
xargs reads items from the standard input, delimited by blanks (which can be protected with double or single quotes or a backslash) or newlines, and executes the command (default is /bin/echo) one or more times with any initial-arguments followed by items read from standard input. Blank lines on the standard input are ignored.
I. 使用说明
1. 参数解释
-0
将特殊字符当做一般字符处理,简单来说,空白不被忽略掉,如下
-a file
文件作为数据源,等同于 cat xxx.txt | xargs
-n num
表示命令在执行的时候一次用的argument的个数
-p
操作具有可交互性,每次执行comand都交互式提示用户选择,当每次执行一个argument的时候询问一次用户
-t
表示先打印命令,然后再执行。
-I
替换,将前面的数据,一各一个的赋值给{},后面使用者可以用{}来表示前面接收的数据
如批量修改文件后缀名
-L
从标准输入一次读取num行送给Command命令 ,-l和-L功能一样
-d
默认的xargs分隔符是回车,argument的分隔符是空格,这里修改的是xargs的分隔符
如下图,将默认的分隔符换成$
2. 结合使用
xargs命令通常是与其他的命令配套结合使用,下面给出几个常见的使用case
a. 打印jvm堆栈信息
jvm应用的id存在pid_file中,需要进行堆栈分析时,一行命令即可
1 | cat pid_file | xargs -I {} jstack {} | grep "VM Periodic Task Thread" |
当然,如果需要关闭应用,也比较简单了
1 | cat pid_file | xargs -I {} kill -9 {} |
b. find查找
配合find命令进行查找匹配也比较常见了,如查找文件并打印内容
1 | find ./ -name \*.bak -type f -print | xargs -t -I {} cat {} |
另外一个常见的就是匹配文本的内容
1 | find ./ -name \*.bak -type f -print | xargs -t -I {} grep a {} -n |
II. 其他
1. 一灰灰Blog: https://liuyueyi.github.io/hexblog
一灰灰的个人博客,记录所有学习和工作中的博文,欢迎大家前去逛逛
2. 声明
尽信书则不如,已上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激
- 微博地址: 小灰灰Blog
- QQ: 一灰灰/3302797840
3. 扫描关注
一灰灰blog
知识星球