Grep\Egrep\Fgrep
文本查找的需要:
grep==global research ;根据模式,搜索文本并显示符合模式的文本行;
Pattern:文本字符和正则表达式的元字符组合而成匹配条件
grep [OPTIONS] PATTERN [FILE...]
——grep 'root' data_20220502-115757.log
grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]
grep
-i(忽略大小写) grep -i 'root' /etc/passwd
--color grep --color 'root' /etc/passwd
alias grep='grep --color'
-v (显示不符合,不匹配的行) grep -v 'root' /etc/passwd
-o (只显示被模式匹配的字符串)grep -o 'root' /etc/passwd
*任意长度的任意字符
?任意单个字符
[]:范围内
[^]:范围外
正则表达式
元字符:
. 匹配任意单个字符
[]匹配指定范围内的任意单个字符
[^]匹配指定范围外的任意单个字符
[:digit:][:lower:][:upper:].....
[[:digit:] ]
grep 'r..t' /etc/passwd
匹配次数:
*:匹配其前面的字符任意次
a,b,ab,aab,adb,annb
ab==b,ab,aab,adb,annb(a可以出现也可以不出现)
a.b=ab,aab,adb,annb
.* 任意长度的任意字符
\?匹配其前面的字符1次或者0次
a?b=b,ab,aab,adb,annb
grep 'a?b' test.text
\{m,n\}匹配其前面的字符至少m次,至多n次
{1,}:至少1次,多了不限制
{0,3}:至多3次
grep 'a{1,3}b' test.text= ab aab
grep 'a.{1,3}b' test.text =aab adb amnb amnbmnbmnb
位置锚定:
^锚定行首:此字符后面的任意内容必须出现在行首
grep '^r' /etc/passwd
$锚定行尾:此字符后面的任意内容必须出现在行尾
grep 't$' /etc/passwd
^$空白行
grep '^$' /etc/passwd
以数字结尾的行:
grep '[[:digit:]]$' /etc/inittab
以空白行+数字结尾的行:
grep '[[:space:]][[:digit:]]$' /etc/inittab
\<或者\b:锚定词首,其后面的任意字符必须作为单词‘首部’出现
<root> root出现
\>或者\b:锚定词尾,其后面的任意字符必须作为单词‘尾部’出现
[root@ip-10-18-6-152 logs]# grep '\<root\>' test2.txt
this is root
[root@ip-10-18-6-152 logs]# grep '\<root' test2.txt
this is root
rooter is a dog name
[root@ip-10-18-6-152 logs]# grep '\<root\b' test2.txt
this is root
[root@ip-10-18-6-152 logs]# grep '\broot' test2.txt
this is root
rooter is a dog name
分组:
()
(ab)* 后项引用
\1:第一个左括号以及与之对应的右括号所包括的所有内容
\2:第一个左括号以及与之对应的
\3:第一个左括号以及与之对应的
grep '(ab)*' test.text
Me love his lover.
She like her liker.
Me like his lover.
grep '\(l..e\).*\1' test3.txt
[root@ip-10-18-6-152 logs]# grep '\(l..e\)*r' test3.txt
Me love his lover.
She like her liker.
Me like his lover.
[root@ip-10-18-6-152 logs]# grep '\(l..e\).*\1' test3.txt
Me love his lover.
She like her liker.
以任意数字开头并结尾的:
grep '([0-9]).*\1$' test3.txt