学习资源来自:www.magedu.com
学习记录过程中难免出现错误,如有发现,还望大神们指出。
示例操作部分有的与历史操作有关,如果先前的示例操作没有执行过的话,可能会有部分示例的操作无法执行。示例仅供参考。(练习题在附录)
文本查找:grep, egrep, fgrep
grep(Global Research): 使用基本正则表达式定义的模式来过滤文本的命令
根据模式搜索文本,并将符合模式的文本行显示出来。
egrep = grep -E
fgrep(fast grep): 不支持正则表达式
Pattern: 由文本字符和正则表达式的元字符组合而成的匹配条件
grep [options] PATTERN [FILE...]
-i:忽略大小写
--color:设定指定情况下显示的高亮颜色
-v: 显示没有被模式匹配到的行
-o:只显示被模式匹配到的字符串
-E: 使用扩展正则表达式
-A #: 追加显示匹配行后面的几行
-B #: 追加显示匹配行前面的几行
-C #: 追加显示匹配行前、后各几行
示例:
cd
grep ‘root‘ /etc/passwd —— 显示匹配root的行
grep -i ‘root‘ /etc/passwd —— 忽略大小写
grep --color ‘root‘ /etc/passwd —— 匹配字符高亮
alias grep=‘grep --color‘
grep ‘root‘ /etc/passwd
grep -v ‘root‘ /etc/passwd —— 显示未匹配到的行
grep -o ‘root‘ /etc/passwd —— 只显示匹配字符串root
grep -A 2 ‘^core id‘ /proc/cpuinfo —— 追加显示匹配行后面的几行
正则表达式:Basic REGEXP(基本),Extended REGEXP(扩展)
基本正则表达式:Basic REGEXP
元字符:
.: 匹配任意单个字符
[]: 匹配指定范围内的任意单个字符
[^]:匹配指定范围外的任意单个字符
字符集合:
[:digit:], [:lower:], [:upper:], [:punct:](标点符号)
, [:space:], [:alpha:], [:alnum:]
次数匹配:
*: 匹配其前面的字符任意次(贪婪模式)
.*: 任意长度的任意字符
\?: 匹配其前面的字符1次或0次
\{m,n\}:匹配其前面的字符至少m次,至多n次
\{1,\}:最少一次
\{0,3\}:最多三次
示例:
grep ‘r..t‘ /etc/passwd
nano test.txt
a
b
ab
aab
acb
adb
amnb
amnbamdb
grep ‘a*b‘ test.txt —— 贪婪匹配
b,ab,aab,acb,adb,amnb,amnbamdb
grep ‘a.*b‘ test.txt
ab,aab,acb,adb,amnb,amnbamdb
grep ‘a\?b‘ test.txt —— 部分匹配
b,ab,aab,acb,adb,amnb,amnbamdb
grep ‘a\{1,3\}b‘ test,txt
ab,aab
grep ‘a.\{1,3\}b‘ test.txt
aab,acb,adb,amnb,amnbamdb
位置锚定:指定字符出现的位置
^: 锚定行首,此字符后面的任意内容必须出现在行首
$: 锚定行尾,此字符前面的任意内容必须出现在行尾
^$: 空白行
示例:
grep ‘r..t‘ /etc/passwd
grep ‘^r..t‘ /etc/passwd —— 锚定行首是指定的字符串
grep ‘w$‘ /etc/inittab —— 锚定行尾是指定的字符w
grep ‘b..h$‘ /etc/passwd —— 锚定行尾是指定的字符串
grep ‘^$‘ /etc/inittab | wc -l —— 显示空白行行数
grep ‘[[:digit:]]$‘ /etc/inittab —— 锚定行尾是任意数字
grep ‘[[:space;][:digit:]]$‘ /etc/inittab
\<或\b: 锚定词首,其后面的任意字符必须作为单词首部出现
\>或\b: 锚定词尾,其前面的任意字符必须作为单词的尾部出现
\<root\>:匹配完整的单词
单词:以特殊字符为分隔符
示例:
nano test.txt
this is root
The user is mroot
rooter is a dog‘s name
chroot is a command
mrooter is not a word
grep "root\>" test2.txt
this is root
The user is mroot
chroot is a command
grep "\<root" teste.txt
this is root
rooter is a dog‘s name
grep "\<root\>" teste.txt
this is root
分组:\(\)
\(ab\)* —— ab作为一个整体
后向引用
\1: 引用第一个左括号以及与之对应的右括号所包括的所有内容
\2:引用第二个左括号以及与之对应的右括号所包括的所有内容
\3:……
示例:
nano test3.txt
He love his lover.
She like her liker.
He like his lover.
She like him
grep ‘l..e‘ test3.txt —— 显示匹配字符串的行
He love his lover.
She like her liker.
He like his lover.
She like him
grep ‘l..e.*l..e‘ test3.txt
He love his lover.
She like her liker.
He like his lover.
grep ‘\(l..e\).*\1‘ test3.txt
He love his lover.
She like her liker.
grep ‘\(l..e\).*\1r‘ test3.txt
He love his lover.
She like her liker.
grep ‘\([0-9]\).*\1$‘ /etc/inittab
—— 匹配中间出现任意数字并以该数字结尾的行
扩展正则表达式:Extended REGEXP
字符匹配(与基本正则表达式相同):
.:匹配任意单个字符
[]:匹配指定范围内的任意单个字符
[^]:匹配指定范围外的任意单个字符
次数匹配:
*: 匹配其前面的字符任意次
?:匹配其前面的字符一次或零次
+: 匹配其前面的字符至少1次
{m,n}:匹配其前面的字符至少m次,至多n次
位置锚定(与基本正则表达式相同):
^:锚定行首
$:锚定行尾
\<:锚定词首
\>:锚定词尾
分组:
():分组
\1, \2, \3, ...
或者
|: or
C|cat: C或cat
示例:
grep --color -E ‘^[[:space:]]+‘ /boot/grub/grub.conf
找出/boot/grub/grub.conf文件中1-255之间的数字;
egrep --color ‘\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>‘ /boot/grub/grub.conf
\.
匹配IP地址
ifconfig | egrep --color ‘(\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>\.){3}
\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>‘