本文主要是介绍Shell编程:正则表达式(位置锚定、分组或者、扩展正则),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 正则表达式 2
- 位置锚定
- 行锚定
- 单词锚定
- 示例
- 分组与其他
- 分组
- 或者
- 示例
- 扩展正则表达式
- 表示次数
- 表示分组
- 示例
正则表达式 2
位置锚定
行锚定
^行首锚定:用于模式的最左侧,表示匹配行首。$行尾锚定:用于模式的最右侧,表示匹配行尾。
示例:
^root$匹配整行,只有 “root” 的行。^$匹配空行。^[[:space:]]*$匹配空白行。
单词锚定
\<或\b词首锚定:用于单词模式的左侧,表示匹配词首(单词由连续的字母、数字、下划线组成)。\>或\b词尾锚定:用于单词模式的右侧,表示匹配词尾。
示例:
\<root\>匹配整个单词 “root”。
示例
-
过滤出不是以
#号开头的非空行:grep "^[^#]" /etc/fstab -
匹配整行内容为 “google” 的行:
grep "^google$" test.txt -
匹配空白行:
grep "^[[:space:]]*$" /etc/fstab -
匹配以单词 “123” 开头的字符串:
echo hello-123 | grep "\b123" -
匹配单词 “hello” 的字符串:
echo hello-123 | grep "\bhello" -
匹配以 “o-123” 为词首的字符串(匹配不到,因为 “o” 不是词首):
echo hello-123 | grep "\bo-123"
分组与其他
分组
()用于将多个字符捆绑在一起,当作一个整体处理。
或者
\|用于表示逻辑“或”。
示例
-
匹配字符
c出现 3 次的字符串:echo abccc | grep "abc\{3\}" -
匹配字符串 “abcabcabc” 中的 “abc” 出现 3 次:
echo abcabcabc | grep "\(abc\)\{3\}"echo abcabcabc | grep "\(ab\)\{3\}" #不能匹配,因为要连续的出现才能匹配 -
匹配字符串 “golgogle” 中的 “go” 出现 1 次:
echo golgogle | grep '\(go\)\{1\}'echo golgogle | grep '\(go\)\{1\}gle' #只能匹配后面的 golgogle -
匹配字符串 “1abc” 中的字符 “1” 或 “2abc”:
echo 1abc | grep "1\|2abc" -
匹配字符串 “1abc2abc” 中的 “1abc” 或 “2abc”:
echo 1abc2abc | grep "\(1\|2\)abc"
扩展正则表达式
扩展正则表达式可以使用 grep -E 或 egrep,或使用 sed -r。可以省去转义符 \ ,点 . 仍需要转义。(表示字符相差不大)
表示次数
*匹配前面的字符任意次。?匹配前面的字符 0 或 1 次。+匹配前面的字符 1 次或多次。{n}匹配前面的字符n次。{m,n}匹配前面的字符至少m次,至多n次。{,n}匹配前面的字符至多n次,n可以为 0。{n,}匹配前面的字符至少n次,n可以为 0。
表示分组
-
()用于分组,将多个字符捆绑在一起。 -
|用于表示逻辑“或”。a|b #a或b C|cat #C或cat (C|c)at #Cat或cat
示例
-
匹配 IP 地址:
ifconfig ens33 | grep netmask | grep -E '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' -
匹配电话号码:
grep -E "[0-9]+-[0-9]+" number.txt输出示例:
025-83346023 0510-8776655 0527-9888899 -
匹配邮箱地址:
echo "544564317@qq.com" | grep -E "[0-9]+@[a-z]+\.[a-z]+" -
匹配手机号:
echo "13770725194" | grep -E "\b1[3456789][0-9]{9}\b" -
匹配邮箱地址(包括大小写字母):
echo "CICIfireway@163.com" | grep -E "[a-zA-Z]+@[0-9]+\.[a-z]+" -
匹配混合字符的邮箱地址:
grep -E "[a-zA-Z0-9]+@[0-9a-z]+\.[a-z]+" email.txt -
匹配美国电话号码:
grep -E '^(\([0-9]+\)|[0-9]+)[ -]?[0-9]+[ -]?[0-9]+' file.txt文件内容示例:
987-123-4567 987 456-1230 (123) 456-7890
这篇关于Shell编程:正则表达式(位置锚定、分组或者、扩展正则)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!