Linux正则表达式

时间:2024-05-20来源:网络

一,正则表达式

1,正则表达式由一堆特殊符号和字母构成----元字符

一些具有特殊含义的符号:? . * + ^ $ () {}

作用
1)对文本中内容进行过滤
2)对文件中的内容进行过滤
正则表达式的种类:
  • 基础正则表达式

  • 扩展正则表达式

通常结合三个命令来使用:
  • grep

  • sed

  • awk

1,grep 命令:
作用:对文件中的内容进行过滤
格式: grep 选项 匹配内容 文件
选项:
  • -v:取反

  • -o:仅仅显出所匹配的内容

  • -E:使用扩展

  • -i:忽略大小写

例:从 a.txt 文件中过滤出包含 root 的行
grep "root" a.txt
例:从 a.txt 文件中过滤出不包含 root 的行
grep -v "root" a.txt

例:从a.txt文件中过滤出仅仅显示root的行

grep -o "root" a.txt

例:统计a.txt文件中有多少个root

grep -o "root" a.txt |wc -w
通配符和正则的区别:
通配符:针对文件名进行匹配查找的
正则表达式:针对文件的内容进行匹配查找的
匹配行首: ^
匹配行尾:$
匹配单词首部:/<
匹配单词尾部:/>

二,正则表达式中元字符:

1)匹配单个字符

.  表示任意一个字符(可以空格 逗号 字母 数字 ... )
例:匹配 a 前面有一个字符的行
grep ".a" 11.txt

2)[ ]表示范围内中的一个

  • [123] 表示匹配1或2或3

  • [0-9]匹配所有的数字

  • [A-Z]匹配所有大写的字母

  • [a-z]匹配所有小写的字母

  • [a-Z]匹配所有的字母

例:匹配文件中包含数字的行
grep [0-9] file
例:包含字母 a 的行
grep "a" file

3)用字符集的方式表达

  • [[:space:]]:表示一个空格

  • [[:digit:]]:表示任意一个数字

  • [[:lower:]]:表示任意一个小写字母

  • [[:upper:]]:表示任意一个大写字母

  • [[ :alpha: ]]:表示任意一个字母

  • [[ :alnum: ]]:表示任意一个字母+数字

  • [[:punct:]]:表示任意一个标点符号

  • [[:digit:][:space:]] 表示一个空格或者任意一个数字

例:匹配一个包含小写字母的行
grep [a-z] filegrep [[:lower:]] file

4) ^[ ]

例:匹配以 # 开头的行
grep ^[#] file
[^a] 匹配除了 a 以外的任意字符
grep [^a] file
例:过滤没有包含 qaz 的行
grep [^qaz] file

例:过滤出#开头后面有一个空格的行

grep "^#[[:space:]]" 11.txt

5)显示匹配到的行的前的若干行

  • -An:显示匹配到的内容的后n行

  • -Bn:显示匹配到的内容的前n行

  • -Cn:显示匹配到的内容的前后各n行

例:匹配包含 root 的行的前 3 行
grep -B3 "root" file

6) 次数匹配

”*“   前面字符出现了任意次数( 0.1.n ) 例子: a*
”.*“   表示任意长度的任意字符
例: a.*b
grep "a.*b" 11.txt

”?“表示其前面字符出现最多一次


  • a{m,n}b                        b前面的a至少出现m次,最多n次

  • -E a{m,n}b                      b前面的a至少出现m次,最多n次

  • grep -E "a{1,}b" 11.txt     b前面的a至少1次最多不限

  • grep -E "a{1,1}b" 11.txt   b前面的a1次

  • grep -E "a?b" 11.txt         b前面的a1次

7)位置锚定

  • ^ 表示以n为开头的行

  • $ 表示以n为结尾的行

例:以 yum 为结尾的行
grep "yum$" file
  • <n 表示单词首部

  • n> 表示单词尾部

  • ^$ 表示空白行

8)分组

  •  将一个内容当作一个整体看待

  • 1 引用第一个分组的内容

  • 2 引用第二个分组的内容

例:在 11.txt 中,过滤出出现过俩个相同数字的行
grep "([[:digit:]]).*1" 11.txt
测试代码
i love my loverhe love his likershe like her lovershe love her liker
例:输出前面一致的行,例如前后都是love或者前后都是like
grep -E "(l..e).*1" 5.5xt

扩展正则表达式:

  • 基础正则:grep [选项] 匹配内容 文件

  • 扩展:

  1. grep -E 匹配内容 文件

  2. egrep 匹配内容 

文件{1,}:其前面的字符至少出现过1次

 + :其前面的字符至少出现过1次

9)或:|

例:过滤出开头是 a (不区分大小写)的行
egrep "^(a|A)" 11.txtegrep "^[aA]" 11.txt
测试对象
sadfa cat asfasdf Cat a asdf
例:匹配cat Cat
grep -E "(c|C)at" 6.txtgrep -E "(cat|Cat)" 6.txt

关键词: Linux 代码 PCB

加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW

或用微信扫描左侧二维码

相关文章

查看电脑版