xargs和grep的区别

查询一个文件applicationContext-profile.xml |中从关键字dataSource3 开始起上数九行


-B :before往前数


find . -name applicationContext-profile.xml |xargs grep -B9 dataSource3




比如:
find . -name "Makefile" | xargs grep "user"
find . -name "Makefile" | grep "user"

我试验的结果好像不加xargs找的是文件名中含有user的文件
加了xargs是找的文件内容里包含user的文件

可是为什么是这样了?我的理解 | 的作用不是把find找出来的文件传递给grep命令作为参数吗,为什么不加xargs没有实现这个功能了?




也就是说,xargs会根据空格或换行符分割标准输入(管道符传递过来的内容),然后根据分割结果多次执行后面的grep命令。这样,每次只针对一个文件执行grep,过滤的就是文件内容。

find的结果是个多行字符串,直接grep的话,就是在这个字符串中进行过滤。这样就如你所说,找的是文件名中包含user的文件。




xargs更象一个筛选器,将符合管道传递过来的内容进行处理,这是一个极度高效的方法。xargs reads items from the standard input.
1、查询包含string的文件
find . -name ‘*.html’| xargs grep string
2、删除符合条件的文件
ls|xargs -i rm -rf {}
find . -name ‘*.log’ -mtime +30| xargs rm -rf
find . -name ‘*.log’ -mtime +30 -exec rm -rf {} \;
注意”{} \;”是一起用的,可以用”{} +”代替。
find . -name “*.log” -exec ls -l {} +
3、-I{}替换串replace-str
cat ip.txt | xargs -I {} echo {}/24
-i[replace-str]可以替代-Ireplace-str
cat ip.txt | xargs -i{} echo {}
cat ip.txt | xargs -iIP echo IP
在远程服务器列表的执行命令
cat ip.txt | xargs -I{} ssh -p322 root@{} hostname
4、批量文件改名
增加字符
ls -1 | xargs -t -i mv {} {}.bak
删减字符
#!/bin/sh
for i in `ls ABCD*`
do
n=${i#”ABCD”}
mv $i $n
done
或者
ls -1 ABCD* |sed ‘s/ABCD//’|xargs -t -i mv ABCD{} {}
删除A字符
#!/bin/sh
for file in `ls *A.wav`;do
n=`echo $file| sed ‘s/A//g’`
/bin/mv $file $n
done
5、批量删除包含code.html的行
find ./ -name “*.html” -exec grep code.html ‘{}’ \; |xargs sed -i ‘/code.html/d’
find ./ -name “*.html” -exec grep code.html ‘{}’ \; -exec sed -i ‘/code.html/d’ {} \;
6、批量替换
find ./ -name “*.html” -exec grep .com ‘{}’ \; -exec sed -i ‘s/.com/.cn/g’ {} \;
find ./ -name “*.html” -exec grep .com ‘{}’ \; |xargs sed -i ‘s/.com/.cn/g’
7、单行显示所有用户名
cut -d: -f1 < /etc/passwd | sort | xargs echo
awk ‘{print $1}’ /etc/passwd | xargs echo
8、–verbose, -t
cat a
one two
three four
cat a |xargs
cat a |xargs –verbose
cat a |xargs –verbose –max-args=2
9、终止所有java进程
pgrep java|xargs kill -9


  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
xargs grepgrep在使用上有一些差别。 grep命令用于在文件中查找指定的字符串并显示匹配的行。例如,可以使用grep -r 'copy' ./ -n命令在当前目录及其子目录中查找包含'copy'字符串的行,并显示行号。 而xargs grep命令则是将grep命令与xargs命令结合使用。xargs命令用于将标准输入数据转换成命令行参数,将多个参数传递给其他命令。通过使用xargs命令,可以实现对find命令等产生的结果集进行操作。例如,可以使用find命令查找符合条件的文件,并使用xargs grep命令在这些文件中查找指定的字符串。 另外,xargs命令还有一个缺陷,即默认使用空格作为参数的分隔符。这就意味着,如果文件名中包含空格,xargs命令可能无法正确处理。为了解决这个问题,可以使用-print0选项来指定以null作为分隔符,与-print0选项配合使用的xargs命令在处理文件名时会更可靠。 因此,总结起来,xargs grep命令是通过结合xargs命令和grep命令来实现对文件中指定字符串的查找,而grep命令则是直接在文件中查找指定的字符串。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [linux系统编程笔记05——grepxargs](https://blog.csdn.net/demon_xi/article/details/109271054)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值