Benjamin Zhang

目前就职于中科院计算机网络信息中心,主要兴趣集中在数据库,操作系统,中间件。

【SHELL】grep脚本一些解释

19 Jun 2019 »

grep脚本一些解释

目的:用于删除某个目录下面一些非常规字符和中文字符的脚本

1.手动 touch几个文件,样例如下:

[root@app2 home]# cd zsd/
[root@app2 zsd]# ls
[root@app2 zsd]# touch 1.log
[root@app2 zsd]# touch 2.log
[root@app2 zsd]# touch ??.log

2.查找出数字以外的文件

[root@app2 zsd]# ls -l |grep -v '[0-9]'.log
total 0
-rw-r--r--. 1 root root 0 Jun 18 11:03 ??.log

解释:其中grep中的-v参数,用于把不匹配的行数选取出来。

[root@app2 zsd]# grep --help
  -v, --invert-match        select non-matching lines

3.去掉开头的语句

[root@app2 zsd]# ls -l 
total 0
-rw-r--r--. 1 root root 0 Jun 18 11:03 1.log
-rw-r--r--. 1 root root 0 Jun 18 11:03 2.log
-rw-r--r--. 1 root root 0 Jun 18 11:03 ??.log
[root@app2 zsd]# ls -l |grep ^-  【去掉开头语句】
-rw-r--r--. 1 root root 0 Jun 18 11:03 1.log
-rw-r--r--. 1 root root 0 Jun 18 11:03 2.log
-rw-r--r--. 1 root root 0 Jun 18 11:03 ??.log

4.使用awk取出,截取文件名,未来用于删除

[root@app2 zsd]# ls -l |grep -v '[0-9]'.log |grep ^- |awk '{print$9}' 【取出文件名称,用于最后删除】
??.log

5.合并rm -f删除选定的文件

[root@app2 zsd]# rm -f `ls -l |grep -v '[0-9]'.log |grep ^- |awk '{print$9}'`
[root@app2 zsd]# ls
1.log  2.log

6.最后实战的一些语句

取出对应的文件名 
ls -l |grep -v '[0-9]'.fbi |grep -v '[a-zA-Z]'.sql |grep ^- | grep -v '[a-zA-Z]'.Reuse |grep -v '[a-zA-Z]'.txt|grep -v '[a-zA-Z]'.cpt |grep -v '[a-zA-Z]'.sh |grep -v '[a-zA-Z]'.zip |awk '{print$9}'

删除匹配的文件名
rm -f `ls -l |grep -v '[0-9]'.fbi |grep -v '[a-zA-Z]'.sql |grep ^- | grep -v '[a-zA-Z]'.Reuse |grep -v '[a-zA-Z]'.txt|grep -v '[a-zA-Z]'.cpt |grep -v '[a-zA-Z]'.sh |grep -v '[a-zA-Z]'.zip |awk '{print$9}'`