Shell脚本学习笔记——正则表达式

时间:2022-07-05 21:27:08

正则在线转换工具

正则表达式基本是与语言无关的,只要学会正则表达式,那么基本上可以结合语言/工具与正则进行文本处理。

我们这里统一与grep来进行验证。

grep是一款Linux下按行匹配文本的工具。通常是Linux下处理文本的第一步,带有很多有用的选项。

    -E:使用扩展正则匹配。

    --color:将匹配到的内容进行语法高亮。


  • 字符类

Shell脚本学习笔记——正则表达式


echo "hello world" | grep -E --color 'hell.'
Shell脚本学习笔记——正则表达式


echo "hello world" | grep -E --color '.'

Shell脚本学习笔记——正则表达式

echo "hello world" | grep -E --color 'wo[rR]ld'

Shell脚本学习笔记——正则表达式

echo "hello woRld" | grep -E --color 'wo[rR]ld'

Shell脚本学习笔记——正则表达式

echo "hello wobld" | grep -E --color 'wo[a-z]ld'

Shell脚本学习笔记——正则表达式

echo "hello woald" | grep -E --color 'wo[a-z]ld'

Shell脚本学习笔记——正则表达式

echo "hello wozld" | grep -E --color 'wo[a-z]ld'

Shell脚本学习笔记——正则表达式

echo "hello wogld" | grep -E --color 'wo[^a-f]ld'

Shell脚本学习笔记——正则表达式

echo "hello woald" | grep -E --color 'wo[^a-f]ld'

Shell脚本学习笔记——正则表达式

echo "hello wofld" | grep -E --color 'wo[^a-f]ld'

Shell脚本学习笔记——正则表达式

从上面这些测试,我们可以得出几个结论:

(1)grep采用的是贪婪匹配,匹配当前行中所有的匹配内容。

(2)grep中 [ ]采用的是前闭后闭区间


  • 数量限定符

Shell脚本学习笔记——正则表达式


echo "hello aaworld" | grep -E --color 'a?'

Shell脚本学习笔记——正则表达式

echo "hello aaaworld" | grep -E --color 'a?'

Shell脚本学习笔记——正则表达式

echo "hello world" | grep -E --color 'a?'

Shell脚本学习笔记——正则表达式

echo "hello aworld" | grep -E --color 'a+'

Shell脚本学习笔记——正则表达式

echo "hello aaworld" | grep -E --color 'a+'

Shell脚本学习笔记——正则表达式

echo "hello world" | grep -E --color 'a+'

Shell脚本学习笔记——正则表达式

echo "hello aworld" | grep -E --color 'a*'

Shell脚本学习笔记——正则表达式

echo "hello aaworld" | grep -E --color 'a*'

Shell脚本学习笔记——正则表达式

echo "hello world" | grep -E --color 'a*'

Shell脚本学习笔记——正则表达式

echo "hello world" | grep -E --color 'a{3}'

Shell脚本学习笔记——正则表达式

echo "hello aaworld" | grep -E --color 'a{3}'

Shell脚本学习笔记——正则表达式

echo "hello aaaworld" | grep -E --color 'a{3}'

Shell脚本学习笔记——正则表达式

echo "hello aaaaworld" | grep -E --color 'a{3}'

Shell脚本学习笔记——正则表达式

echo "hello world" | grep -E --color 'a{3,}'

Shell脚本学习笔记——正则表达式

echo "hello aaworld" | grep -E --color 'a{3,}'

Shell脚本学习笔记——正则表达式

echo "hello aaaworld" | grep -E --color 'a{3,}'

Shell脚本学习笔记——正则表达式

echo "hello aaaaworld" | grep -E --color 'a{3,}'

Shell脚本学习笔记——正则表达式

echo "hello world" | grep -E --color 'a{,3}'

Shell脚本学习笔记——正则表达式

echo "hello aaworld" | grep -E --color 'a{,3}'

Shell脚本学习笔记——正则表达式

echo "hello aaaworld" | grep -E --color 'a{,3}'

Shell脚本学习笔记——正则表达式

echo "hello aaaaworld" | grep -E --color 'a{,3}'

Shell脚本学习笔记——正则表达式

echo "hello aworld" | grep -E --color 'a{2,4}'

Shell脚本学习笔记——正则表达式

echo "hello aaworld" | grep -E --color 'a{2,4}'

Shell脚本学习笔记——正则表达式

echo "hello aaaworld" | grep -E --color 'a{2,4}'

Shell脚本学习笔记——正则表达式

echo "hello aaaaworld" | grep -E --color 'a{2,4}'

Shell脚本学习笔记——正则表达式


  • 位置限定符

Shell脚本学习笔记——正则表达式


只匹配行首

echo "hello world aworld worlda aworldb world" | grep -E --color '^world'

Shell脚本学习笔记——正则表达式

只匹配行尾

echo "world aworld worlda aworldb world" | grep -E --color 'world$'

Shell脚本学习笔记——正则表达式

严格匹配一行

echo "world aworld worlda aworldb world" | grep -E --color '^world$'

Shell脚本学习笔记——正则表达式

echo "world" | grep -E --color '^world$'

Shell脚本学习笔记——正则表达式

其他

echo "world aworld worlda aworldb world" | grep -E --color '\<world'

Shell脚本学习笔记——正则表达式

echo "world aworld worlda aworldb world" | grep -E --color 'world\>'

Shell脚本学习笔记——正则表达式

echo "world aworld worlda aworldb world" | grep -E --color '\<world\>'

Shell脚本学习笔记——正则表达式

echo "world aworld worlda aworldb world" | grep -E --color '\bworld'

Shell脚本学习笔记——正则表达式

echo "world aworld worlda aworldb world" | grep -E --color 'world\b'

Shell脚本学习笔记——正则表达式

echo "world aworld worlda aworldb world" | grep -E --color '\bworld\b'

Shell脚本学习笔记——正则表达式

echo "world aworld worlda aworldb world" | grep -E --color '\Bworld'

Shell脚本学习笔记——正则表达式

echo "world aworld worlda aworldb world" | grep -E --color 'world\B'

Shell脚本学习笔记——正则表达式

echo "world aworld worlda aworldb world" | grep -E --color '\Bworld\B'

Shell脚本学习笔记——正则表达式

其中,\b用来限定目标串中是否有以指定字符串开头的单词,我们称之为词界。\B称之为非词界。


  • 特殊符号

Shell脚本学习笔记——正则表达式


echo "abcabcabcdef" | grep -E --color '(abc){3}'

Shell脚本学习笔记——正则表达式

echo "abcabcabcabcdef" | grep -E --color '(abc){3}'

Shell脚本学习笔记——正则表达式

此时,( ) 表示将包含的内容作为一个整体,作为一个单元,进而可以用数量限定符来进行限定。