linux查询筛选命令 grep、xargs

grep命令

# grep参数
 1.  *: 表示当前目录所有文件,也可以是某个文件名
 2.  -r 是递归查找
 3.  -n 是显示行号
 4.  -R 查找所有文件包含子目录 (递归查询)
 5.  -i 忽略大小写
有意思的命令行参数:
grep -i '关键字' 文件名(*是查询全部文件) :不区分大小写地搜索。默认情况区分大小写
grep -l  '关键字' 文件名 :只列出匹配的文件名,不列出路径
grep -L  '关键字' 文件名 :列出不匹配的文件名
grep -w  '关键字' 文件名 :只匹配整个单词,而不是字符串的一部分(如匹配‘magic’,而不是‘magical’)
grep -C number  '关键字' 文件名 :匹配的上下文分别显示[number]行
grep pattern1 | pattern2 files :显示匹配 pattern1(关键字) 或 pattern2 的行
grep pattern1 files | grep pattern2 :显示既匹配 pattern1 又匹配 pattern2 的行
有些用于搜索的特殊符号:
\< 和 \> 分别标注单词的开始与结尾。
例如:
grep man * 会匹配 ‘Batman’、‘manic’、‘man’等
grep '\<man' * 匹配‘manic’和‘man’,但不是‘Batman’
grep '\<man\>' 只匹配‘man’,而不是‘Batman’或‘manic’等其他的字符串。
'^':指匹配的字符串在行首
'$':指匹配的字符串在行尾
多个linux命令配合使用
查询不包含match的文件列表
ls | xargs grep -L "match"

会把包含aaa的同时不包含bbb的文件移动到test目录
mv `grep -rl 'aaa' *.php | grep -L 'bbb' *.php` ./test

mv `grep 'aaa' . -r -l| grep 'bbb' . -r -L` ./test

xargs

xargs 是给命令传递参数的一个过滤器,也是组合多个命令的一个工具。它把一个数据流分割为一些足够小的块,以方便过滤器和命令进行处理。
删除数量比较多的文件
[root@eccs_web client]# ls | xargs -n 20 -t rm -rf
rm -rf abc.doc.bak imag2e.tgz.bak
ls当然是输出所有的文件名(用空格分割)
xargs就是将ls的输出,每20个为一组(以空格为分隔符),作为rm -rf的参数
也就是说将所有文件名20个为一组,由rm -rf删除,这样就不会超过命令行的长度了
删除某个目录下,所有.bak后缀的文件:
# find . -name '*.bak' | xargs rm -f
备注:find命令查找出符合条件的文件,xargs命令,将find找到的每一个文件,作为参数,传给rm命令进行处理。
查找所有有引用SimpleDateFormat这个类的java文件:
# find . -name '*.java'  | xargs grep SimpleDateFormat
通常ls列出的文件,想直接管道通过rm -rf删除是无效的.这时就要配合命令xargs使用了:

例如: 按时间排序,删除最后的10个文件

ls -t | tail -10 | xargs rm -rf    
当然,也可以用

ls -lt | tail -100 | awk '{ print $9 }' | xargs rm -rf   
两者效果是相同的同理,如果想按时间倒序排列,也就是说离现在最近的时间越排在最后显示,就用ls -rt当然,也可以使用find 配合rm删除。

也可以用下面的语句清空内容

#!/bin/bash
for i in `ls test.log.??` ;do
    echo "">$i
done
当然,如果是多个目录下面,再清除文件,也是可以的。只不过多了一层嵌套而忆。我的目录结构如下:

[root@web tomcat]# ll
总计 260
drwxr-xr-x 2 www www 20480 12-28 09:23 bbs
drwxr-xr-x 2 www www 16384 12-28 00:00 comment
drwxr-xr-x 2 www www 36864 12-28 03:50 enterprise
drwxr-xr-x 2 www www 24576 12-28 00:00 expert
drwxr-xr-x 2 www www 36864 12-28 00:02 feedback
drwxr-xr-x 2 www www 36864 11-15 12:30 generator
drwxr-xr-x 2 www www 24576 12-28 00:02 passport
drwxr-xr-x 2 www www 20480 12-28 00:00 search
drwxr-xr-x 2 www www 20480 12-28 09:35 usercenter
[root@web comment]# ll
总计 936
-rw-rw-r-- 1 www www       2 12-28 09:57 catalina.2012-12-24.log
-rw-rw-r-- 1 www www       2 12-28 09:57 catalina.2012-12-25.log
-rw-rw-r-- 1 www www       2 12-28 09:57 catalina.2012-12-26.log
-rw-rw-r-- 1 www www       2 12-28 09:57 catalina.2012-12-27.log
-rw-r--r-- 1 www www   34155 12-28 10:01 catalina.out
-rw-rw-r-- 1 www www       2 12-28 09:57 localhost.2012-12-14.log
-rw-rw-r-- 1 www www       2 12-28 09:57 localhost.2012-12-17.log
-rw-rw-r-- 1 www www       2 12-28 09:57 localhost_access_log.2012-12-25.txt
-rw-rw-r-- 1 www www       2 12-28 09:57 localhost_access_log.2012-12-26.txt
-rw-rw-r-- 1 www www  629729 12-28 09:57 localhost_access_log.2012-12-27.txt
如果想清空以上所有目录里的所有文件,就可以这样做:

for i in `ls`;do (cd $i ;for m in `ls`;do echo " ">$m;done);done
注:上面的圆括号是不能少的。

而如果想要清空一个文件的内容,再使用xargs配合echo "">file,发现确不能正常生效。如:

find . -name "test.*" |xargs echo "">
因为,find和echo的不是这样配合使用的。其两者简单配合有另外一个妙用:

find . -name "file*" -print | xargs echo "" > /tmp/find.log
该语句的作用,是将当前目录下,所有以file开头的文件查找到,并将其相对路径及名称输入到find.log文件中,输入方式为每行一个。对符合条件的原文件不会做任何改变。
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux中,管道命令用于将一个命令的输出直接作为另一个命令的输入,以此来实现多个命令组合使用的功能。常见的管道命令有: 1. |(竖杠):该符号用于将一个命令的输出作为另一个命令的输入,例如: ``` ls -l | grep test ``` 该命令将列出当前目录下的所有文件,然后将其中包含“test”关键字的文件筛选出来。 2. >(大于号):该符号用于将一个命令的输出重定向到一个文件中,例如: ``` ls -l > file.txt ``` 该命令将列出当前目录下的所有文件,并将输出重定向到名为“file.txt”的文件中。 3. <(小于号):该符号用于将一个文件的内容作为一个命令的输入,例如: ``` sort < file.txt ``` 该命令将读取名为“file.txt”的文件,并将其中的内容进行排序。 4. >>(双大于号):该符号用于将一个命令的输出追加到一个文件中,例如: ``` echo "hello world" >> file.txt ``` 该命令将向名为“file.txt”的文件中追加一行“hello world”。 5. tee:该命令将一个命令的输出同时输出到屏幕和一个文件中,例如: ``` ls -l | tee file.txt ``` 该命令将列出当前目录下的所有文件,并将输出同时显示在屏幕上和名为“file.txt”的文件中。 6. xargs:该命令用于将一个命令的输出作为另一个命令的参数,例如: ``` find . -name "*.txt" | xargs rm ``` 该命令将查找当前目录及其子目录下所有扩展名为“txt”的文件,并将它们作为参数传递给rm命令,从而删除这些文件。 以上是常见的Linux中的管道命令,它们可以方便地实现多个命令的组合使用,提高工作效率。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值