(1.)grep -F YOURSTRING -R path
功能:用grep搜索文档中的字符串
[root@SOR_SYS hahah]# grep -F 0576 -R /root/zy/hahah
/root/zy/hahah/b:05766798607
/root/zy/hahah/b:05766798608
/root/zy/hahah/b:05766798609
/root/zy/hahah/a:05766798608
(2.)grep -v -f file1 file2
功能:输出文件2中的内容,但是剔除包含在文件1中的内容
下面我们来看一个应用:
[root@SOR_SYS hahah]# cat a
1
4
05766798608
05766798608
6
7
[root@SOR_SYS hahah]# cat b
05766798607
05766798608
05766798609
[root@SOR_SYS hahah]# grep -v -f b a |tee 222 | wc -l
4
[root@SOR_SYS hahah]# cat 222
1
4
6
7
PS:
tee语法:tee [-a] [-i] [File…]
作用:相当于echo加>的作用,将标准输入输出到标准输入的同时写入文件
-a:(add)不覆盖原来的内容,添加到文件的后面
-i:(ignore)没完成则不被打断
列出文本文件slayers.story的内容,同时复制3份副本,文件名称分别为ss-copy1、ss-copy2、ss-copy3:
cat slayers.story |tee ss-copy1 ss-copy2 ss-copy3
(3.)grep -F -f file1 file2
功能:可以把文件2中存在文件1的行输出
但是我做了一个试验,如果文件1中没有重复的行,结果是对的!如果有重复的行,结果和没有重复的行是一样的!
我想达到的目的是 文件1放的是手机号的前7位,文件2放的是手机号前7位 和 所代表的省份,输出结果然后统计文件1每个省有多少个手机号码??
[root@SOR_SYS hahah]# cat file1
11111
22222
11111
22222
33333
44444
55555
[root@SOR_SYS hahah]# cat file2
11111 bj
22222 hb
33333 hn
44444 nm
55555 xm
66666 mk
[root@SOR_SYS hahah]# grep -F -f file1 file2
11111 bj
22222 hb
33333 hn
44444 nm
55555 xm
[root@SOR_SYS hahah]#
看来这个是无法实现了,file1中有2个11111和2个22222,即如果file1有重复的行,还重复输出。
[root@SOR_SYS hahah]# join -1 2 -2 1 <(sort file1|uniq -c) <(sort file2)
11111 2 bj
22222 2 hb
33333 1 hn
44444 1 nm
55555 1 xm