-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgrep.sh
85 lines (52 loc) · 1.9 KB
/
grep.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#!/bin/bash
## grep 2016-12-19
## http://www.aqzt.com
## email: [email protected]
## robert yu
## centos 6
###Grep 'OR' 或操作
grep "pattern1\|pattern2" file.txt
grep -E "pattern1|pattern2" file.txt
grep -e pattern1 -e pattern2 file.txt
egrep "pattern1|pattern2" file.txt
awk '/pattern1|pattern2/' file.txt
sed -e '/pattern1/b' -e '/pattern2/b' -e d file.txt
#找出文件(filename)中包含123或者包含abc的行
grep -E '123|abc' filename
#用egrep同样可以实现
egrep '123|abc' filename
#awk 的实现方式
awk '/123|abc/' filename
###Grep 'AND' 与操作
grep -E 'pattern1.*pattern2' file.txt # in that order
grep -E 'pattern1.*pattern2|pattern2.*pattern1' file.txt # in any order
grep 'pattern1' file.txt | grep 'pattern2' # in any order
awk '/pattern1.*pattern2/' file.txt # in that order
awk '/pattern1/ && /pattern2/' file.txt # in any order
sed '/pattern1.*pattern2/!d' file.txt # in that order
sed '/pattern1/!d; /pattern2/!d' file.txt # in any order
#显示既匹配 pattern1 又匹配 pattern2 的行。
grep pattern1 files | grep pattern2
###Grep 'NOT'
grep -v 'pattern1' file.txt
awk '!/pattern1/' file.txt
sed -n '/pattern1/!p' file.txt
##删除两个文件相同部分
grep -v -f file1 file2 && grep -v -f file2 file1
##删除两个文件相同部分 实用comm
comm -3 file1 file2
##删除两个文件相同部分 使用awk
awk '{print NR, $0}' file1 file2 |sort -k2|uniq -u -f 1|sort -k1|awk '{print $2}'
##或者:
awk '{print $0}' file1 file2 |sort|uniq -u
##其他操作
#不区分大小写地搜索。默认情况区分大小写,
grep -i pattern files
#只列出匹配的文件名,
grep -l pattern files
#列出不匹配的文件名,
grep -L pattern files
#只匹配整个单词,而不是字符串的一部分(如匹配‘magic’,而不是‘magical’),
grep -w pattern files
#匹配的上下文分别显示[number]行,
grep -C number pattern files