I. Overview
Regular expressions are the knowledge that is often needed in operational operations. File lookups, log parsing, rewrite rules, shell scripts, and so on, all require the knowledge of regular expressions. So what is a regular expression? My understanding is to find or replace the string you need according to certain rules, which is a regular expression, exactly, it is a rule. There are many commands to use regular expressions, and the grep and egrep we're talking about today are the most common ones. There's also sed, awk, and we'll talk about that later.
Second, Grep/egrep
Egrep is an enhanced version of grep, and Egrep can be implemented by grep, and in some places it is more convenient to use Egrep. Here are some details about these two commands.
Grammar:grep [-cinvABC] ‘word‘ filename
-C: Print the number of lines that meet the requirements
-I: Ignore case
-N: Output with the same number of lines as required
-V: Print rows that do not meet the requirements
-A: followed by a number (with or without spaces), for example, –A2 to print the line that meets the requirements and the following two lines
-B: followed by a number, such as –B2, to print the line that meets the requirements and the above two lines
-C: followed by a number, such as –C2, to print the line that meets the requirements and two rows above and below
Experiment:
-C
' oo ' a.txt 6
-I.
[[email protected] test]$ grep--color-i'OO'a.txtroot:x:0:0: root:/root:/bin/bashlp:x:4:7: lp:/var/spool/lpd:/sbin/nologinmail:x:8: A: mail:/var/spool/mail:/sbin/nologinuucp:x:Ten: -: uucp:/var/spool/uucp:/sbin/Nologinoperator: x: One:0:operator:/root:/sbin/nologinpostfix:x: the: the::/var/spool/postfix:/sbin/nologin
The--color option means highlighting what you are searching for:
-N
[Email protected] test]$ grep-n'oo'a.txt1: root:x:0:0: root:/root:/bin/Bash5: lp:x:4:7: lp:/var/spool/lpd:/sbin/Nologin9: mail:x:8: A: mail:/var/spool/mail:/sbin/NologinTen: uucp:x:Ten: -: uucp:/var/spool/uucp:/sbin/Nologin One:operator: x: One:0:operator:/root:/sbin/Nologin +:p ostfix:x: the: the::/var/spool/postfix:/sbin/nologin
-V
' oo ' 3 bin:x: 1:1: bin:/bin:/sbin/nologindaemon:x:2:2:d aemon:/sbin:/sbin/ NOLOGINADM:X:3:4: adm:/var/adm:/sbin/nologin
-A
' Li\.jianlin ' a.txt li.jianlin:x:7202:7022::/home/li.jianlin:/bin/bash
Because 93 rows are the last line, only the folded lines are displayed
-B
' Li\.jianlin ' a.txt -wang.xishuai:x:7200:7022::/home/wang.xishuai:/bin/bash- Han.xinyu:x:7201:7022::/home/han.xinyu:/bin/bash: li.jianlin:x: 7202:7022::/home/li.jianlin:/bin/bash
-C
' Xishuai ' a.txt -xiong.zhengmao:x:7199:7022::/home/xiong.zhengmao:/bin/bash: WANG.XISHUAI:X:7200:7022::/home/wang.xishuai:/bin/bash-han.xinyu:x :7201:7022::/home/han.xinyu:/bin/bash
Special character "."
Special characters. Denotes any character
' 7.22 ' a.txtmabg:x: 7032:7022::/home/mabg:/bin/bashzhongwt:x:7038:7022::/HOME/ZHONGWT :/bin/bash
. * denotes any number of arbitrary characters (can contain blank lines)
' .* ' A.TXT|WC-l
Visible use. * Find all rows.
It means no, or there are 1 of them.
[[email protected] test]$ grep"n?"A.txt[[email protected]-zol-fss-web1 test]$ grep"n\?"A.txt|head-n3root:x:0:0: root:/root:/bin/bashbin:x:1:1: bin:/bin:/sbin/nologindaemon:x:2:2:d aemon:/sbin:/sbin/Nologin[[email protected]-zol-fss-web1 test]$ Egrep'n?'A.TXT|HEADN-N3-Bash:headn:command not found[[email protected]-zol-fss-web1 test]$ Egrep'n?'A.txt|head-n3root:x:0:0: root:/root:/bin/bashbin:x:1:1: bin:/bin:/sbin/nologindaemon:x:2:2:d Aemon:/sbin:/sbin/nologin
From the above example we can find that using grep can not directly determine the special symbol? , but it needs to be escaped, but not escaped with Egrep.
In addition to, EGREP supports + (indicates one or more):
[[email protected] test]$ grep'o+'A.txt|head-N3[[email protected]-zol-fss-web1 test]$ Egrep'o+'A.txt|head-n3root:x:0:0: root:/root:/bin/bashbin:x:1:1: bin:/bin:/sbin/nologindaemon:x:2:2:d aemon:/sbin:/sbin/Nologin[[email protected]-zol-fss-web1 test]$ grep'o\+'A.txt|head-n3root:x:0:0: root:/root:/bin/bashbin:x:1:1: bin:/bin:/sbin/nologindaemon:x:2:2:d Aemon:/sbin:/sbin/nologin
Use () in a regular expression to represent a whole:
' (Oo|ol) ' A.txt[[email protected]'(oo|ol)' a.txt|head-n3root:x:0: 0: root:/root:/bin/bashbin:x:1:1: bin:/bin:/sbin/nologindaemon:x: 2:2:d aemon:/sbin:/sbin/nologin
grep can also search for related rows in the specified file or directory:
[Email protected] test]$ grep-r--include='*.txt' 'oo\+'././A.TXT:ROOT:X:0:0: root:/root:/bin/bash./A.TXT:LP:X:4:7: lp:/var/spool/lpd:/sbin/Nologin./A.TXT:MAIL:X:8: A: mail:/var/spool/mail:/sbin/Nologin./A.TXT:UUCP:X:Ten: -: uucp:/var/spool/uucp:/sbin/Nologin./a.txt:operator: x: One:0:operator:/root:/sbin/Nologin./A.TXT:POSTFIX:X: the: the::/var/spool/postfix:/sbin/nologin
-R is the meaning of recursive search,--include= "*.txt" means searching for a file ending in. txt. Note that when using grep, you need to escape if you use the + sign in the regular.
Linux Learning (23) Regular expression (i) Grep/egrep