1. 基础语法
2. grep练习
在文章link中, 介绍过grep的基本用法,本文学习正则表达式,顺便学习grep的一些进阶用法。
练习的文本来自于鸟叔私房菜。总共有22行文字。
练习1:中括号 [] 来搜寻字符集合
说明:[] 里面不论有几个字元,他都仅代表某‘一个’字元
题目: 搜寻 test 或 taste 这两个单词对应的行
回答:grep -n 't[ae]st' regular_express.txt
结果:
题目:找出有数字的那一行
回答:grep -n '[0-9]' regular_express.txt
结果:
练习2:集合字符[]的反向选择[^]
题目: 找出oo
前面不是g
的行
回答:grep -n '[^g]oo' regular_express.txt
结果:
练习3:行首与行尾字元 ^ $
题目: the
出现在行首列的行
回答:grep -in '^the' regular_express.txt
结果:
题目: 开头不是字母的行
回答:grep -n '^[^a-zA-Z]' regular_express.txt
结果:
注意:本次练习中两个^
有着不同的含义。第一个表示开头,第二个表示反向选择。
题目:输出结尾是小数点的行
回答:grep -n '/.$' regular_express.txt
结果:
因为小数点有其他含义,所以必须使用\
让小数点变为普通字符
题目: 找出空白行
回答: grep -n '^$' regular_express.txt
效果:
练习4:任意一个字符.
和 重复字符*
注意:
正则表达式中的*
和bash中的万用字符表达的含义不同。
.
(小数点):代表‘一定有一个任意字元’的意思;*
(星星号):代表重复 0 个或多个前面的 RE 字符’的意义。.*
就代表零个或多个任意字元
题目: 输出至少有两个连续oo的字符串
回答:
grep -n 'ooo*' regular_express.txt
结果:
练习5:限定连续字符范围{}
注意:
按照正则表示法的处理原则,要让 {
生效,得要加上反斜线
题目: 找出 2 个 o 以上的 goooo…g所在行
回答:
grep -n 'go\{2,\}g' regular_express.txt
效果: