linux笔记三 --正则表达式

前言:本篇博客的主要是记录学习过程中的正则表达式和sheel通配符。

内容:

1.shell通配符

通配符是基于bash解释器解析的,而正则表达式由正则引擎的软件(如awk,grep,sed等)解析,二者完全不同。

* 表示匹配任意多个字符,0个到多个。
表示匹配任意一个字符。
[] 表示选择其中的一个匹配。
[-] 表示匹配一个范围中的一个字符。如:[a-z]匹配到a-z中的一个。
[^]或[!] 表示不匹配其中的任意一个。如:[^a-z]不匹配其中的任意一个

实例(此处实例参考其他博客)

  • [[email protected] ~]# ls test*     #那个 * 代表后面不论接几个字符都予以接受  
  • [[email protected] ~]# ls test?     #那个 ? 代表后面"一定"要接"一个"字符  
  • [[email protected] ~]# ls test???   #那个 ??? 代表"一定要接三个"字符!  
  • [[email protected] ~]# cp test[1-5] /tmp  # 将 test1, test2, test3, test4, test5 若存在的话,就拷贝到 /tmp  
  • [[email protected] ~]# cp test[!1-5] /tmp # 只要不是 test1, test2, test3, test4, test5 之外的其它 test?拷贝到 /tmp  
  • [[email protected] ~]# cd /lib/modules/`uname -r`/kernel/drivers  # 系统先执行 uname -r 找出输出结果;将结果累加在目录上面,来执行 cd 的功能!   = cd /lib/modules/$(uname -r)/kernel  #另外,这个 quot (`) 的功能,也可以利用 $() 来取代喔!  
  • [[email protected] ~]# cp *[A-Z]* /tmp   #表示文件中包含大写字母  
  • [[email protected] ~]# ls -lda /etc/*[35]* #表示文件中包含数字3或者5. 

    注意:通配符就好比全局变量在任何时候都能使用,但是如果遇到了vi,awk,grep,sed等软件,则使用正则表达式,通配符就不在使用

2.谈谈正则表达式(这个比较难理解)1.正则表达式的一些特殊符号:

    [[:alnum:]] =[0-9a-zA-Z]等等。这里可以参考linux学习笔记一

    [[:xdigit:]]=[代表16进制的数字类型,包括0-9,A-F,a-f的数字与字符]

[[:graph:]] = [代表了除了空格和Tab键以外的所有按键]

             [[:cntrl:]] =[代表了键盘上面的控制按键,即包括CR,LF,Tab,Del等]

            2.基础正则表达式语法(RE语法):一个字符串如果是正则表达式表示的,则其中的任意字符被称为RE字符。

            只支持普通正则表达式语法:^  $  .  *  \  []  "  ‘

            支持扩展正则表达式语法:^  $  .  *  \  []  "  ‘  +  ?  |  ()

标准的正则表达式:

基础RE字符 意义和实例
^string
意义:以string为首的匹配行

实例:查找以root开头的匹配行

grep ‘^root‘ /etc/passwd

$string
意义:以string结尾的匹配行

实例:查找以数字结尾的匹配行

grep --color ‘[[:digit:]]$‘ /etc/inittab

.
意义:代表一定有一个任意字符的字符(除换行符),在awk中可匹配换行

实例:查找r开始中间有两个字符,后面是一个t的行。

grep ‘r..t‘ /etc/passwd


\

意义:转义字符,将特殊符号的特殊意义去除,将普通字符变为特殊字符。
范例:查找含有单引号‘的那一行
grep -n \‘ 008.txt  

*

意义:重复0个到无穷多个前一个字符
范例:找出含有(ab)(aab)(acb)等的字符串,注意,因为*可以是0个,所以ab也是符合待查找字符串。另外,因为*为重复“前一个RE字符”的符号,因此在*之前一定要紧接着一个RE字符!例如任意字符则为.*
grep -n ‘a*b‘ 008.txt

[list]

意义:从字符集合的RE字符里面找出想要选取的字符(不包括换行符),在awk中可以包含换行符。注意此时中括号里的\.*等特殊字符均变成一般字符(除了[])。
范例:查找含有(gl)或(gd)的那一行,需要特别留意的是,在[]当中代表一个待查找的字符,例如“a[ab]b”代表查找的字符串可以是aab,abb
grep -n ‘a[ab]b‘ 008.txt

[n1-n2]

意义:从字符集和的RE字符里面找出想要选取的字符范围
范例:查找含有任意数字的那一行。需特别留意,在字符集合[]中的减号-是有特殊含义的,它代表两个字符之间的所有连续字符(与编码顺序有关)
grep -n ‘a[a-z]b‘ 008.txt

[^]

意义:反向选择
范例:查找的字符串可以是(ab)(aab)
grep ‘a[^c-z]‘ 008.txt

\{n\}

\{n,\}
\{n,m\}

意义:连续n到m个的前一个RE字符,若为\{n\}则是连续n个的前一个RE字符,若为\{n,\}则是连续n个以上的前一个RE字符 。
在支持扩展的正则表达式中用另一种形式,且n,m必须是0到255之间的整数:

注:本质上是扩展正则表达式的语法

grep ‘a\{1\}b‘ 008.txt  在b之前至少1个a

grep ‘a\{2\}b‘  008.txt 在b之前至少2个a

grep ‘a\{1,2\}b‘  008.txt 在b之前1-2个a

grep ‘a\{1,\}b‘  008.txt 在b之前至少1个a

扩展的正则表达式:

grep需加-E (或者使用到扩展符号时加\)

sed需加-r  (或者使用到扩展符号时加\)

awk,perl本身支持扩展这则表达式(也就是说awk中如果要引用(为普通字符要[(]如此使用。)


\+

意义:重复一个或一个以上的前一个RE字符(和\{1\}是有区别的,\+表示最大的匹配,而\{1\}是最小的匹配)
例如:

grep ‘a\{1\}b‘ 008

ab

aab

aaab

grep ‘a\+b‘ 008

ab

aab

aaab


\?

意义:零个或一个的前一个RE字符
和*的区别就是:?是最小匹配,*是最大匹配即匹配最长。

\|

意义:用或(or)的方式找出数个字符串,两边的字符串不能加额外的空格,

ABC|DEF表示ABC或DEF,A(BC|DE)F表示ABCF或ADEF

grep ‘a\(a\|b\)b‘ 008

范例:去除空白行和行首为#的行
grep -Env ‘^$|^#‘ regular_express.txt  

\(\) 意义:找出“组”字符串,[]的引申

范例:查找glad或good这两个字符串,因为g与d是重复的,所以可以将la与oo以或的方式列于()中

grep -En ‘g(la|oo)d‘ regular_express.txt

grep "l\(ik\|ov\)e" 008

()+ 意义:重复一个或一个以上的前一个“组”
{n}
{n,}
{n,m}
与普通正则表达式含义一致,只是在支持扩展正则表达式中要用此形式,即awk、grep -E、sed -r 中使用

008文件内容:

m

a

ab

aab

abb

aaab

acb

amnb

amnbc

amnmnmnanb

asb

adb

‘dongzi‘

love is like

like is love

几种有用的正则表达式

项目 正则表达式
匹配正规文本中的单词

\b[[:alpha:]]\+\b(b是单词的边界)

^[[:alpha:]]*$(注意此处的*不能换成?由于匹配长短问题,?是最短匹配)

可以匹配出空白行。

^[[:alpha:]]+$就匹配不出空白行。

(^| )["({[]*book[]})"?,.:;!‘s ]*( |$)

匹配空行 ^$
匹配含有空格的空白行和空行 ^空格*$
匹配整个行 ^.*$
匹配一个或多个空格 空格空格*
匹配s前面含有任意abc随机组合的字符串 [abc]*s
匹配格式化的美元数额 \$[空格0-9]*\.[0-9][0-9]
匹配电子邮件地址 [[:alnum:]]*\@[[:alnum:]]*\.[[:alnum:]]\{2,4\}$
匹配一个HTTP URL http://[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,4}
时间: 2024-08-12 01:14:01

linux笔记三 --正则表达式的相关文章

linux笔记三-------根目录相关说明

1. /bin   binary二进制文件,可执行程序文件          ls   su    pwd    cd          内部文件是一些指令信息 2. /sbin  super binary超级的二进制文件目录          超级管理员root可以执行的命令文件 3. /dev   device设备目录          在linux系统里边全部设备都使用文件表示          /dev/cdrom 硬件光驱设备          /dev/sda1  分区设备    

linux 笔记--扩展正则表达式,bash脚本—变量,条件判断,算术运算

正则表达式:有两类,一:basic regexp  二:extended(扩展正则表达式)  他们的部分元字符不一样,意义也不相同 grep:使用基本正则表达式或定义的模式中过滤文本的命令,-E;使用扩展正则表达式  -A 数字:不仅显示匹配到的行,还显示后面几行  -B 数字:不仅显示匹配到的行,还显示前几行  -C 数字:不仅显示匹配到的行,还显示前后个几行 扩展正则表达式: 其中 . [] [^] * ^ $ \< \>与grep是相同的, ? 与 \?:意思相同,可以不写\  +:其前

linux笔记三:grep和sed的用法

grep [option] Pattern [FILE...] -i:忽略大小写 --colour:用高亮的颜色显示 -v:显示没有被匹配到的行 -o:只显示被匹配到的字符串 -E:使用扩展正则表达式 -A #:包括后来多少行 -B #:包括前面多少行 -C #:包括前后多少行 扩展正则表达式: 字符匹配: . [] 如:a-z,A-Z [^] 次数匹配: *:其前字符任意次 ?:匹配其前面的字符1次或0次 +:匹配其前面的字符至少一次 {m,n}: 位置锚定: ^:锚定行首,此字符后面的任意内

辛星整理的三本linux笔记,免积分下载,希望对您有所帮助

废话不多说了,第一本是我在看李明老师的视频的时候的笔记,全书大约116页,在csdn上的下载地址为:点我下载 ,如果左边的地址崩溃了,也可以在浏览器中输入如下地址然后下载:http://download.csdn.net/detail/xinguimeng/7757985   在百度网盘上的下载地址为:点我去百度网盘,如果左边的地址跪了,也可以在浏览器中输入如下下载地址进行下载:http://pan.baidu.com/s/1pJBdc8N  . 第二本是我在看韩顺平老师讲linux的时候的笔记

【Linux学习笔记三】文件目录管理

[注]文章中的所有截图均为centos下实验结果,亲测命令正确= ̄ω ̄= [参考资料]<Linux从入门到精通(第2版)>刘忆智 等编著 *************************************************和团队共享文件*************************************************** 1.和团队共享文件:创建工作目录,并创建一个用户组管理该目录.      $ sudo groupadd workgroup         

Linux笔记常规部分总结(待续)

Linux笔记常规部分总结 shell: 子shell bash--bash bash: 1.命令历史.命令补全 2.管道.重定向 3.命令别名 4.命令行编辑 5.命令行展开 6.文件名通配 7.变量 8.编程 命令行编辑: 光标跳转: ctrl+a:跳到命令行首 ctrl+e:跳到命令行尾 ctrl+u:删除光标至命令行首的内容 ctrl+k:删除光标至命令行尾的内容 ctrl+l:清屏 命令历史: 查看命令历史:history -c:清空命令历史 -d OFFSET [n]:删除指定位置的

Perl语言学习笔记 9 正则表达式处理文本

1.替换 s/PATTERN/REPLACE/; #返回是否替换成功的布尔值 可以使用捕获变量,如:s/(\w)/$1/ 匹配失败则不做任何处理 2.定界符 对于没有左右之分的定界符,重复三次即可,如:s///.s### 对于有左右之分的定界符,需使用两对,一对包含模式,一对包含替换字符串,这两对可以不一样,如:s{}{}.s[]{}.s<>[] 3.可选修饰符 /g可进行全局替换,替换所有匹配到的字符串,如:s/ / /g /s:使得 . 匹配所有字符 /i:大小写无关 4.绑定操作符 $f

老男孩培训视频听课笔记三(在51cto上听的)

SSH 连接Linux工具CRT SSH概念: 现在有两个版本的SSH1/SSH2,建议选择SSH2 查看服务端启动情况:$netstat -lntup | grep 22 自己加的:现在CRT工具很多:crt xshell putty ,现在我使用的是xshell           另外在在centos系统里可以安装lrzsz的软件包,可以实现在crt里利用rz/sz上传/下载小文件,大文件容易出错           CRT连接经常出现的问题:              ·超时问题:利用p

马哥学习笔记三十二——计算机及操作系统原理

缓存方式: 直接映射 N路关联 缓存策略: write through:通写 write back:回写 进程类别: 交互式进程(IO密集型) 批处理进程(CPU密集型) 实时进程(Real-time) CPU: 时间片长,优先级低IO:时间片短,优先级高 Linux优先级:priority 实时优先级: 1-99,数字越小,优先级越低 静态优先级:100-139,数据越小,优先级越高 实时优先级比静态优先级高 nice值:调整静态优先级   -20,19:100,139   0:120 ps