谈谈find,xargs,管道

问题:原意在本文件夹下所有P*.txt文件中用string2替换掉string1,于是输入shell命令: find . -name "P*.txt" | sed -i 's/string1/string2/',发现得不到自己想要的结果。于是简单的了解一下管道的原理以及find,xargs联合使用方式。

1,什么是管道?

指前一个程序的标准输入作为后一个程序的标准输入。

注意:1)管道命令只处理前一个命令正确输出,不处理错误输出

        2)管道命令右边命令,必须能够接收标准输入流命令才行。


find命令会在终端(标准输出)上打印出找到的文件。则sed的标准输入是包含文件名的文本。

~/Desktop/test$:ls
P1.txt  P2.txt
在test文件夹下有P1.txt,P2.txt两个文件,每个文件内容为“string1",若find . -name "P*.txt" 的标准输出是在屏幕上打印出

~/Desktop/test$:find . -name "P*.txt"
./P2.txt
./P1.txt
所以sed处理的是文件名,而不是对文件内的文本进行处理

~/Desktop/test$:find . -name "P*.txt" | sed -n 's/P/S/p'
./S2.txt
./S1.txt


xargs 则把前一个程序的标准输出转为后一个程序的命令行参数

所以find . -name "P*.txt" 返回./P2.txt,./P1.txt.则find . -name "P*.txt" | xargs sed -n 's/string1/string2/p'中后个一个命令实际是sed -n 's/string1/string2/p' P1.txt P2.txt,即对文件进行处理而不是文件名。

~/Desktop/test$:find . -name "P*.txt" | xargs sed -n 's/string1/string2/p'
string2
string2
同样我们可以用grep命令

~/Desktop/test$:find . -name "P*.txt" | grep 'P'
./P2.txt
./P1.txt
比较上下两者的不同。
~/Desktop/test$:find . -name "P*.txt" | xargs grep 'string1'
./P2.txt:string1
./P1.txt:string1





  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值