Home  >  Article  >  php教程  >  Detailed explanation of Grep command-9 classic usage scenarios

Detailed explanation of Grep command-9 classic usage scenarios

高洛峰
高洛峰Original
2016-12-13 14:54:101666browse

Grep
The full name is Global Regular Expression Print, which means global regular expression
It is a powerful text search tool that uses regular matching
1. Command format
grep [options] files


2. Main parameters
-c: output only Number of matching lines
-i: Case-insensitive
-n: Display matching navigation and line numbers
-l: When querying multiple files, only output file names containing matching characters
-v: Reverse matching, that is, display no Matching lines
-h: The file name is not applicable when querying
-s: No error message is displayed


3. Part of the regular expression
Antonym characters: such as """" means matching ""
^$ starts with End
[] single character, [A]
[-] matches a range, [0-9a-zA-Z] matches all numbers and letters
* the previous character appears 0 or more times
+ the previous character appears One or more times
. Any character

4. Classic scene

Unless you want to be case-sensitive, please add -i to ignore case

(1) Combine the find command and pipe
One of your music There are files in various formats in the folder, but you only want to find the mp3 file of the artist jay, and it does not contain any mixed tracks
[root@localhost ~]#find . -name ".mp3" | grep -i jay | grep -vi "remix"
Analysis: 1) Use find -name to list all mp3 files and redirect to grep
2) Use grep -i to find lines containing jay
3) Use grep -vi to find lines that do not Lines containing remix


(2)-A -B -C
Many times, we don’t care about matching lines but the context of matching lines. At this time, -A -B -C is useful
-A n n lines after, A is remembered as (After)
-B n n lines before, B is remembered as (Before)
-C n n lines before, n lines after , C memory is (Center)
Example

[root@localhost ~]# ifconfig | grep -A 2 "Link encap"
eth0      Link encap:Ethernet  HWaddr 00:0C:29:F3:38:15  
          inet addr:192.168.91.129  Bcast:192.168.91.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fef3:3815/64 Scope:Link
--
lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host


[root@localhost ~]#  ifconfig | grep -C 2 "lo"
          Interrupt:67 Base address:0x2024 


lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host

(3) Use -c to count the number
You have a large file at hand. This file contains URLs, such as www.baidu.com tieba.baidu.com and so on. Do you want to know how many URLs belong to Baidu
[

root@localhost ~]# grep -c "*baidu.com*" filename
例子
[root@localhost ~]# cat file.txt
wtmp begins Mon Feb 24 14:26:08 2014
192.168.0.1
162.12.0.123
"123"
123""123
njuhwc@163.com
njuhwc@gmil.com 123
www.baidu.com
tieba.baidu.com
www.google.com
www.baidu.com/search/index
[root@localhost ~]# grep -cn ".*baidu.com.*" file.txt 
3

(4) -r recursively search subdirectories
Find files containing matching characters under the current directory and its subdirectories
Search for subdirectories, and output the line number after matching, The dot here represents the current directory

[root@localhost ~]# grep -nr HELLO_HWC_CSND_BLOG* .

Example:

[root@localhost ~]# grep -nr baidu .
./file.txt:8:www.baidu.com
./file.txt:9:tieba.baidu.com
./file.txt:11:www.baidu.com/search/index
./test/test.txt:1:http://www.baidu.com

Search for subdirectories, and only output the file name after matching
[root@localhost ~]# grep -lr HELLO_HWC_CSND_BLOG* .

Example:

[root@localhost ~]# grep -lr baidu .
./file.txt
./test/test.txt

(5)--line-buffered Turn on buffering mode
You have a file that is dynamic, it constantly adds information to the end of the file, and you want the output to contain certain information OK. That is, continuously grep a dynamic stream


[root@localhost ~]#tail -f file | grep --line-buffered your_pattern


(6) Combined with ps to find the process

[root@localhost ~]# ps aux | grep init
root         1  0.0  0.1   2072   632 ?        Ss   22:52   0:01 init [5]                             
root      4210  0.0  0.1   6508   620 ?        Ss   23:01   0:00 /usr/bin/ssh-agent /bin/sh -c exec -l /bin/bash -c "/usr/bin/dbus-launch --exit-with-session /etc/X11/xinit/Xclients"
root      4233  0.0  0.0   2780   504 ?        S    23:01   0:00 /usr/bin/dbus-launch --exit-with-session /etc/X11/xinit/Xclients
root      4956  0.0  0.1   3920   680 pts/1    R+   23:27   0:00 grep init

Here we see grep init us The executed commands are also listed
If we don’t want this line, we can change the command like this

[root@localhost ~]# ps aux | grep [i]nit
root         1  0.0  0.1   2072   632 ?        Ss   22:52   0:01 init [5]                             
root      4210  0.0  0.1   6508   620 ?        Ss   23:01   0:00 /usr/bin/ssh-agent /bin/sh -c exec -l /bin/bash -c "/usr/bin/dbus-launch --exit-with-session /etc/X11/xinit/Xclients"
root      4233  0.0  0.0   2780   504 ?        S    23:01   0:00 /usr/bin/dbus-launch --exit-with-session /etc/X11/xinit/Xclients

(7) Find a directory that does not contain it
[root@localhost ~]#grep -R --exclude-dir=node_modules 'some pattern' /path/to/search

Example

[root@localhost ~]# ls
anaconda-ks.cfg  Desktop  file.txt  find.result  install.log  install.log.syslog  test
[root@localhost ~]# grep -r baidu .
./file.txt:www.baidu.com
./file.txt:tieba.baidu.com
./file.txt:www.baidu.com/search/index
./test/test.txt:http://www.baidu.com

If we don't want to include the test directory at this time

[root@localhost ~]# grep -R --exclude-dir=text "baidu" .
./file.txt:www.baidu.com
./file.txt:tieba.baidu.com
./file.txt:www.baidu.com/search/index

If an error is reported

grep: unrecognized option `--exclude-dir=test'

it means the version is too old, update it and it will be ok


(8) Find the IP address
The -o and -P commands are used here
We check through man grep
-o, --only-matching:
              Show only the part of a matching line that matches PATTERN.
-P, --perl- regexp:
                Interpret PATTERN as a Perl regular expression.
That is to say -o, only display the part of the matching line that matches the regular expression
-P, as a Perl regular match

[root@localhost ~]# cat file.txt
wtmp begins Mon Feb 24 14:26:08 2014
192.168.0.1
162.12.0.123
"123"
123""123
njuhwc@163.com
njuhwc@gmil.com 123
www.baidu.com
tieba.baidu.com
www.google.com
www.baidu.com/search/index
[root@localhost ~]# grep -oP "([0-9]{1,3}\.){3}[0-9]{1,3}" file.txt
192.168.0.1
162.12.0.123

(9) Find the mailbox

[root @localhost ~]# grep -oP "[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(.[a-zA-Z0-9_-]+)+" file. txt

example

[root@localhost ~]# cat file.txt
wtmp begins Mon Feb 24 14:26:08 2014
192.168.0.1
162.12.0.123
"123"
123""123
njuhwc@163.com
njuhwc@gmil.com 123
www.baidu.com
tieba.baidu.com
www.google.com
www.baidu.com/search/index
[root@localhost ~]# grep -oP "[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+" file.txt
njuhwc@163.com
njuhwc@gmil.com


Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Previous article:Powerful grep commandNext article:Powerful grep command