linux管道符号 的坑,原来,Linux的管道命令还有这种写法

说起Linux的管道命令,肯定Linuxer们会说,简单,不就|和>

其中|表示将上一个命令的输出传递到下一个命令。>表示将命令结果输入到文件,

e16cba7be2216cc272a2f2a242380be7.png

这时,一位隐于角落的老者喃喃道,不不,“你知道茴香豆的回字一共是有四种写法的”(鲁迅《孔乙己》,现在已经从中学教材中删除)。

Linux的文化就是将众多晦涩难懂的小工具组合起来,从而产生连原作者都无法想象的威力,而这些小工具往往2个字母,无数个命令参数,学习曲线颇为陡峭。而这组合的方式就是利用管道,所以在Linux的规范中,小工具们产生的格式一定是纯文本,这样后面的工具才能正确地解读。那管道的写法究竟几种方式,只是用|把命令们串起来就可以了吗?

我们使用find和grep两个命令做一个示范:

find命令按照文件名称找出需要的文件。grep命令从文件内容中筛选出符合要求的部分。

2c8c94ccb7bb410f04a4d551226021a9.png

第一式,使用find的exec参数。

find . -type f -name "cron*" -exec grep -l log {} \;

732362c1dc373fd3b88954217a20c265.png

exec很强大,有时可以解决你用其他方式时非常别扭的情况。

第二式,使用xargs大法,这个工具使用得非常多。

find . -type f -name "cron*" | xargs grep -l log

02b75c70a8164ab36e2b10edf263a364.png

xargs为什么以x开头呢,这个命令类似于excel的转置,将前面的列,变为后面的行。这样其实就是让后面的命令根据前面找的文件逐条执行。

这时,有小伙伴要问了,我有时参数并不在最后一个啊,如果在中间怎么办,放心,xargs有-I(大i)参数,可以让你生成带变量的命令:

find . -type f -name "cron*" | xargs -I % grep log % -li声明%作为变量,代表前面命令的结果,然后在grep中使用%变量。

第三式,使用$()来优先求结果。

grep -l log $(find . -type f -name "cron*")$()将优先计算,随后结果和grep共同构成最终的命令。但是要注意一个大坑,如果find找不出文件,grep命令将会无限执行,需要按ctrl+c结束。

好了,大概就讲这么多了,如果大家觉得还有更加奇妙的写法,欢迎在下方留言。

原创版权,如引用需要注明来源和链接。

举报/反馈

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值