1.基本认识
正则表达式就是处理字符串的方法,它以行为单位,来进行字符串的处理行为,透过一些特殊符号的辅助,可以让使用者轻易地达到 “查找/替换” 某特定字符串的处理程序。
正则表达式基本上是一种表示法,只要工具程序支持这种表示方法,那么该工具程序就可以用来作为正则表达式的字符处理之用。一些常用的工具比如说vi,grep,awk,sed等等
正则表达式和shell是linux基础中的基础,但也是最难的部分,学好它们之后,后面的学习之路就会更加顺畅了
2.正则表达式的用途
对于系统管理员来说,系统产生的信息太多,不能一条条看,通过正则表达式,可以轻松筛选出需要查看的信息,使管理系统变得容易。
除此之外,正则表达式还有强大的字符串处理功能,比如通过比对字符串,从而删除一些垃圾信息和广告。
3.基础正则表达式
正则表达式其实是处理字符串的一个标准表示方式。先看一个最简单的字符串选取功能的工具程序,grep。
grep的功能就是进行字符串数据的比对,然后将符合要求的字符串打印出来,但是呢,grep是以整行为单位进行的,打印也是打印整行。
1)语法:grep [-acinv] '搜寻的字符串' filename
//顺便说一下,方括号里面通常代表的是附加参数,可以不使用,使用的话加上减号,如果使用多于一个,那么举个例子就是 grep -vn 'sth' filename
-c 计算搜寻到的字符串的次数
-n 顺便打印出行号
-v 反向输出,就是说显示出没有搜寻字符串的行
2) 特殊符号的配合使用,这些东西都只是用来处理字符串的
a. [ ]
举例:grep -n 't[ae]st' filename
方括号里面无论有多少字符,都只代表一个字符,但是意思是可以从这么多里面进行选择,比如搜到的结果有可能包括 test,taste
b. ^
举例:grep -n '[^g]oo' filename
这个可以理解为否定的意思,也就是说,搜寻的关键字包含oo,但是oo的前面不能包含g
再举一些例子:grep -n '[^a-z]oo' filename //oo前面不能是小写字母
grep -n '[0-9]' filename //凡是带数字的都给找出来
注意:如果^符号放在方括号内,则表示反向选择,放在方括号外表示定位在行首
c. 行首字符 ^
举例: grep -n '^the' filename
这就意味着行首出现the的话,就给找出来
再举一些例子: grep -n '^[a-z]' filename //行首是小写字母的都给找出来,注意和前面放在方括号中的比较
grep -n '^[^a-zA-Z]' filename //稍微复杂一点,就是行首只要不是字母的,都给找出来
d. 行尾字符 $
举例:grep -n '\.$' filename
意思是,以小数点 . 结尾的都给找出来
再举一些例子: grep -n '^$' filename //这样做的目的就是找出空白行
grep -v '^$' filename | grep -v '^#' //通过取反的形式,就吧空白行以及注释行全部给去掉了
//其实使用 -v 意思就是删除不要那些东西
简单一句话可以解释这2个符号,就是说^表示它后面的第一个字符为行首字符,$表示它前面的第一个字符为行尾字符。所以‘^$’的意思就是行首就是行尾,那么就是什么都没有。
e. 任意一个字符 .
举例:grep -n 'g..d' filename
句点的意思就是说,一个句点代表一个字符.这样的话,比如good,glad这类的词就被找出来了。但是比如god就不行,因为在g和d之间只有一个字符。
f. 重复字符 *
举例: grep -n 'o*' filename
这个*的意思,其实得和前面的一个字符连起来,一共代表有0到无数个这个字母一样的字符。
那如果是ooo*就代表有2个或2个以上的o
那么如果想代表任意字符该怎么办呢? .*就解决了,比如说g.*g就代表g和g之间有0到任意数量的字符,甚至可能是一句话,比如 good mechanism to develop program,就是说g开头,到prog结束。
举一些例子:grep -n '[0-9][0-9]*' filename //代表含有任意数字的,都给选出来
grep -n 'g.*g' filename //代表在g和g之间有任意数量的字符的,都给选出来
grep -n 'g*g' filename //代表含有从1个到任意数量的g的,都给选出来
g. 限定连续正则表达式字符范围 { }
做一个假设,假如我想找出两个到五个o的连续字符串,而不是2个到无穷个,该怎么办呢???
答案是使用那个表达式字符范围符号进行限制,有一个东西专门说明一下,就是右斜线,使用它的原因是因为花括号有特殊意义,所以用它来解除特殊意义
举例:grep -n 'o\{2\}' filename //有2个o的,找出来
grep -n 'go\{2,5\}g' filename //在g和g之间有2个到5个o的,找出来
grep -n 'go\{2,\}g' filename //在g和g之间有大于等于2个o的,找出来
正则表达式就是处理字符串的方法,它以行为单位,来进行字符串的处理行为,透过一些特殊符号的辅助,可以让使用者轻易地达到 “查找/替换” 某特定字符串的处理程序。
正则表达式基本上是一种表示法,只要工具程序支持这种表示方法,那么该工具程序就可以用来作为正则表达式的字符处理之用。一些常用的工具比如说vi,grep,awk,sed等等
正则表达式和shell是linux基础中的基础,但也是最难的部分,学好它们之后,后面的学习之路就会更加顺畅了
2.正则表达式的用途
对于系统管理员来说,系统产生的信息太多,不能一条条看,通过正则表达式,可以轻松筛选出需要查看的信息,使管理系统变得容易。
除此之外,正则表达式还有强大的字符串处理功能,比如通过比对字符串,从而删除一些垃圾信息和广告。
3.基础正则表达式
正则表达式其实是处理字符串的一个标准表示方式。先看一个最简单的字符串选取功能的工具程序,grep。
grep的功能就是进行字符串数据的比对,然后将符合要求的字符串打印出来,但是呢,grep是以整行为单位进行的,打印也是打印整行。
1)语法:grep [-acinv] '搜寻的字符串' filename
//顺便说一下,方括号里面通常代表的是附加参数,可以不使用,使用的话加上减号,如果使用多于一个,那么举个例子就是 grep -vn 'sth' filename
-c 计算搜寻到的字符串的次数
-n 顺便打印出行号
-v 反向输出,就是说显示出没有搜寻字符串的行
2) 特殊符号的配合使用,这些东西都只是用来处理字符串的
a. [ ]
举例:grep -n 't[ae]st' filename
方括号里面无论有多少字符,都只代表一个字符,但是意思是可以从这么多里面进行选择,比如搜到的结果有可能包括 test,taste
b. ^
举例:grep -n '[^g]oo' filename
这个可以理解为否定的意思,也就是说,搜寻的关键字包含oo,但是oo的前面不能包含g
再举一些例子:grep -n '[^a-z]oo' filename //oo前面不能是小写字母
grep -n '[0-9]' filename //凡是带数字的都给找出来
注意:如果^符号放在方括号内,则表示反向选择,放在方括号外表示定位在行首
c. 行首字符 ^
举例: grep -n '^the' filename
这就意味着行首出现the的话,就给找出来
再举一些例子: grep -n '^[a-z]' filename //行首是小写字母的都给找出来,注意和前面放在方括号中的比较
grep -n '^[^a-zA-Z]' filename //稍微复杂一点,就是行首只要不是字母的,都给找出来
d. 行尾字符 $
举例:grep -n '\.$' filename
意思是,以小数点 . 结尾的都给找出来
再举一些例子: grep -n '^$' filename //这样做的目的就是找出空白行
grep -v '^$' filename | grep -v '^#' //通过取反的形式,就吧空白行以及注释行全部给去掉了
//其实使用 -v 意思就是删除不要那些东西
简单一句话可以解释这2个符号,就是说^表示它后面的第一个字符为行首字符,$表示它前面的第一个字符为行尾字符。所以‘^$’的意思就是行首就是行尾,那么就是什么都没有。
e. 任意一个字符 .
举例:grep -n 'g..d' filename
句点的意思就是说,一个句点代表一个字符.这样的话,比如good,glad这类的词就被找出来了。但是比如god就不行,因为在g和d之间只有一个字符。
f. 重复字符 *
举例: grep -n 'o*' filename
这个*的意思,其实得和前面的一个字符连起来,一共代表有0到无数个这个字母一样的字符。
那如果是ooo*就代表有2个或2个以上的o
那么如果想代表任意字符该怎么办呢? .*就解决了,比如说g.*g就代表g和g之间有0到任意数量的字符,甚至可能是一句话,比如 good mechanism to develop program,就是说g开头,到prog结束。
举一些例子:grep -n '[0-9][0-9]*' filename //代表含有任意数字的,都给选出来
grep -n 'g.*g' filename //代表在g和g之间有任意数量的字符的,都给选出来
grep -n 'g*g' filename //代表含有从1个到任意数量的g的,都给选出来
g. 限定连续正则表达式字符范围 { }
做一个假设,假如我想找出两个到五个o的连续字符串,而不是2个到无穷个,该怎么办呢???
答案是使用那个表达式字符范围符号进行限制,有一个东西专门说明一下,就是右斜线,使用它的原因是因为花括号有特殊意义,所以用它来解除特殊意义
举例:grep -n 'o\{2\}' filename //有2个o的,找出来
grep -n 'go\{2,5\}g' filename //在g和g之间有2个到5个o的,找出来
grep -n 'go\{2,\}g' filename //在g和g之间有大于等于2个o的,找出来