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

正则在线转换工具

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

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

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

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

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


  • 字符类

Shell脚本学习笔记——正则表达式_第1张图片


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


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

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

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


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

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

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

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

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

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

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

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

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


  • 数量限定符

Shell脚本学习笔记——正则表达式_第2张图片


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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


  • 位置限定符

Shell脚本学习笔记——正则表达式_第3张图片


只匹配行首

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


只匹配行尾

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

严格匹配一行

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

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

其他

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

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

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

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

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

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

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

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

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

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


  • 特殊符号

Shell脚本学习笔记——正则表达式_第4张图片


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

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

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




你可能感兴趣的:(Shell脚本)