Linux命令行与shell脚本编程大全 8.5分
读书笔记 正则表达式
超级露

1. 正则表达式识别的特殊字符包括(不能在文本模式中单独使用这些字符): .*[]^${}\+?|()

2. 脱字符(caret character, ^)(BRE)定义从数据流中文本行的行首开始的模式。如果模式位于其他位置而不是文本行的行首,正则表达式模式会不成立。 -> echo "Books are great" | sed -n '/^Book/p' 如果将脱字符放到模式中的其他位置而不是开头,它会跟普通字符一样,而不是特殊字符: -> echo "This ^ is a test" | sed -n '/s ^/p' 如果指定正则表达式模式时只用了脱字符,不需要用反斜线来转义。但如果在模式中先指定了脱字符,后跟一些额外的文本,那么必须在脱字符前用转义字符。

3. 美元符($)(BRE)特殊字符定义了行尾锚点。将这个特殊字符加在文本模式之后来指明数据行必须以该文件模式结尾: -> echo "This is a good book" | sed -n '/book$/p'

4. 过滤出数据流中的空白行(BRE) -> sed '/^$/d' data5

5. 点字符用来匹配任意的单字符,除了换行符。但点字符必须匹配一个字符,如果在点字符的位置没有字符,那么模式就不成立。(BRE) -> sed -n '/.at/p' data6

6. 字符组[](BRE) -> sed -n '/[ch]at/p' data6 -> echo "Yes" | sed -n '/[Yy][Ee][Ss]/p' -> sed -n '/maint[ea]n[ae]nce/p /sep[ea]r[ea]te/p ' data9

7. 排除字符组[^](BRE) -> sed -n '/[^ch]at/p' data6

8. 使用区间:用单破折号来在字符组中使用字符区间。指定区间的第一个字符、单破折线,然后是区间的最后一个字符。(BRE) -> sed -n '/^[0-9][0-9][0-9][0-9][0-9]$/p' data8 -> sed -n '/[c-h]at/p' data6 -> sed -n '/[a-ch-m]at/p' data6

9. 特殊字符组(BRE) [[:alpha:]]:匹配任意字母字符,不管是大写还是小写 [[:alnum:]]:匹配任意字母数字字符0-9,A-Z或a-z [[:blank:]]:匹配空格或制表符 [[:digit:]]:匹配0-9之间的数字 [[:lower:]]:匹配小写字母字符a-z [[:print:]]:匹配任意可打印字符 [[:punct:]]:匹配标点符号 [[:space:]]:匹配任意空白字符:空格、制表符、NL、FF、VT和CR [[:upper:]]:匹配任意大写字母字符A-Z -> echo "abc123" | sed -n '/[[:digit:]]/p'

10. 星号*表示该字符将会在匹配模式的文本中出现0次或多次(BRE) -> echo "ik" | sed -n '/ie*k/p' 将点特殊字符和星号特殊字符组合起来匹配任意多个任意字符的模式 -> echo "bt" | sed -n '/b[ae]*t/p'

11. gawk程序可以使用大多数扩展正则表达式模式符号,并且能提供一些额外的sed编辑器没有的额外过滤功能。但正因为如此,它通常在处理数据流时更慢。

12. 问号?表明前面的字符可以出现0次或1次,但仅限于此。(ERE) -> echo "beet" | gawk '/be?t/{print $0}' -> echo "baet" | gawk '/b[ae]?t/{print $0}'

13. 加号+表明前面的字符可以出现1次或多次,但必须至少出现1次。(ERE) -> echo "bt" | gawk '/be+t/{print $0}' -> echo "bt" | gawk '/b[ae]+t/{print $0}'

14. ERE中的花括号允许你为可重复的正则表达式指定一个上限。 m - 正则表达式准确出现m次 m,n - 正则表达式至少出现m次,至多出现n次 -> echo "bet" | gawk --re-interval '/be{1}t/{print $0}' -> echo "beet" | gawk --re-interval '/be{1,2}t/{print $0}' -> echo "beat" | gawk --re-interval '/b[ae]{1,2}t/{print $0}'

15. 管道符号允许你在检查数据流时,用逻辑OR方式指定正则表达式引擎要用的两个或多个模式。 -> echo "He has a hat." | gawk '/[ch]at|dog/{print $0}'

16. 正则表达式模式也可以用圆括号聚合起来 -> echo "Sat" | gawk '/Sat(urday)?/{print $0}' -> echo "cat" | gawk '/(c|b)a(b|t)/{print $0}'

0
《Linux命令行与shell脚本编程大全》的全部笔记 37篇
豆瓣
我们的精神角落
免费下载 iOS / Android 版客户端