正则表达式(一)
正则表达式是处理字符串的一种表示方式,而不是字符串处理工具
常见的特殊符号:[:alnum:] 代表英文及数字,即0-9,A-Z,a-z
[:alpha:] 代表英文,即A-Z,a-z
[:digit:] 代表数字,即0-9
[:lower:] 代表小写,即a-z
[:upper:] 代表大写,即A-Z
grep:分析文件中的每一行数据,取出我们想要的部分
一、基本操作
1、语法 grep [-acinvAB] [--color=auto] '搜寻字符串' filename-a:将二进制文件以text文件的方式搜寻数据
-c:计算找到'搜寻字符串'的次数
-i:忽略大小写
-n:输出行号
-v:反选
-A:后面可以加数字,为after的意思,除了列出该列外,后续n行业列出
-B:后面可以加数字,为before的意思,除了列出该列外,前面n行业列出
--color=auto:可以将找到的关键词部分加上颜色显示出来
2、范例:
一、基本练习:
a、将 last 当中,有出现 root 的哪一行取出来
last | grep 'root'
b、与a范例取反
last | grep -v 'root'
c、要将捉到的关键词显色,且加上行号来表示
dmesg|grep -n --color=auto 'eth'
d、承上题,在关键词所在行的前两行不后三行也一起捉出来显示
dmesg|grep -A3 -B2 -n --color=auto 'eth'
e、从regular_express.txt文件当中取得 the 这个特定字符串
grep -n 'the' regular_express.txt
a、搜寻test和taste这两个单词
grep -n 't[ae]st' regular_express.txt 说明:其实[]里面无论有几个字符,他都只代表某『一个』字符
b、不想要oo前面有g的话呢,可以利用在集合字符的反向选择 [^]
grep -n '[^g]oo' regular_express.txt
c、oo 前面不想要有小写字符
grep -n '[^a-z]oo' regular_express.txt
d、要叏得有数字的那一行
grep -n '[0-9]' regular_express.txt
或者 grep -n '[[:digit:]]' regular_express.txt
三、行首不行尾字符 ^ $a、查询the只在行首的列
grep -n '^the' regular_express.txt
b、我想要开头是小写字符的那一行
grep -n '^[a-z]' regular_express.txt
c、那如果我不想要开头是英文字母
grep -n '^[^a-zA-Z]' regular_express.txt
d、行尾结束为小数点 (.) 的那一行
grep -n '\.$' regular_express.txt(小数点有特殊意义,所以要转意)
e、搜索空白行
grep -n '^$' regular_express.txt
四、 任意一个字符 . 不重复字符 *
. (小数点):代表『一定有一个任意字符』的意思
* (星星号):代表『重复前一个 0 到无穷多次』的意思,为组合形态
a、查询 起头是 g 而结束是 d ,中间必须有两个字符哪行
grep -n 'g..d' regular_express.txt
b、至少两个 o 以上的字符串
grep -n 'ooo*' regular_express.txt 说明:“o*”代表的是:拥有空字符或一个 o 以上的字符,特别注意,因为空字符(就是有没有字符都可以的意思)
a、查询 起头是 g 而结束是 d ,中间必须有两个字符哪行
grep -n 'g..d' regular_express.txt
b、至少两个 o 以上的字符串
grep -n 'ooo*' regular_express.txt 说明:“o*”代表的是:拥有空字符或一个 o 以上的字符,特别注意,因为空字符(就是有没有字符都可以的意思)
c、得到我们的g....g,就利用任意一个字符“.”
grep -n 'g.*g' regular_express.txt
d、找出有数字的行
grep -n '[0-9][0-9]*' regular_express.txt
五、限定范围{}
a、找到两个 o 的字符串
grep -n 'o\{2\}' regular_express.txt
b、找出 g 后面接 2 到 5 个 o
grep -n 'go\{2,5\}g' regular_express.txt
grep -n 'g.*g' regular_express.txt
d、找出有数字的行
grep -n '[0-9][0-9]*' regular_express.txt
五、限定范围{}
a、找到两个 o 的字符串
grep -n 'o\{2\}' regular_express.txt
b、找出 g 后面接 2 到 5 个 o
grep -n 'go\{2,5\}g' regular_express.txt