正则表达式

本文详细介绍了Linux命令行中正则表达式的使用,包括基础和扩展元字符,如^、$、.、*等,并展示了在grep和sed中的应用。通过实例演示了如何匹配、查找和修改文本,如打印特定行、过滤特定模式以及行定位与替换。此外,还讲解了sed的行号定位、正则定位及文件操作功能,如删除、替换和插入文本。
摘要由CSDN通过智能技术生成

正则表达式通常用于判断语句中,用来检查某一字符串是否满足某一格式

正则表达式是由普通字符与元字符组成
普通字符包括大小写字母、数字、标点符号及一些其他符号
元字符是指在正则表达式中具有特殊意义的专用字符

基础正则表达式常见元字符(支持的工具:grep、egrep、sed、awk)
①\                转义字符,用于取消特殊符号的含义,例:\!、\n、\$等

②^               例 : ^name  表示匹配以name单词开始的行 
[root@localhost ~]# grep ^root /etc/passwd
**root**:x:0:0:root:/root:/bin/bash
[root@localhost ~]# ll |grep ^d
**d**rwxr-xr-x. 2 root root    6 3月  29 16:58 bak

③$              例 : name$  表示匹配以name单词结尾的行 
[root@localhost ~]# ll |grep bak$
drwxr-xr-x. 2 root root    6 3月  29 16:58 **bak**

④^$           空行
[root@localhost ~]# grep -n ^$ /etc/profile     #输出空行并打印行号
2:
5:

⑤.              表示匹配一个且任意一个字符(不能匹配空行)
[root@localhost ~]# grep ^r..t /etc/passwd
root:x:0:0:root:/root:/bin/bash

⑥*             匹配前一个字符(连续出现)0次或1次以上  

⑦.*            匹配任意

⑧[集合]      匹配集合中的任意单个字符

⑨[^集合]     对集合取反

⑩\{n,m\}     匹配前一个字符n到m次                       #egerp  awk 使用时不加\
  \{n,\}          匹配前一个字符至少n次
  \{n\}           匹配前一个字符n次

\d      匹配一个数字字符相于[0-9]
\D     匹配一个非数字字符相于[^0-9]
\w      匹配包括下划线的任意单词字符
\W    匹配包括下划线的任意非单词字符
\s      空白符
\S     非空白符

扩展正则元字符
+       匹配前面的字符至少一次                    #支持egrep    awk    grep -E    sed -r
?       匹配前面的字符0或1次
()      组合与保留
|      或者


grep
用法:grep   [选项]     匹配模式      [文件]···
常用选项:
-i         忽略大小写
-V       取反匹配
-W     匹配单词
-q      静默匹配,不将结果显示在屏幕


sed
流式编辑器
-非交互式
-逐行处理
-可以对文本进行增、删、改、查等操作

用法:  sed   [选项]    '[定位符]指令'    文件名
    命令  | sed   [选项]  '[定位符]指令'

常用选项:
-n       屏蔽默认输出 
-i        直接修改源文件
-r        支持扩展正则


①行号定位
[root@localhost ~# sed -n '3p' /etc/passwd              #打印第3行
[root@localhost~#sed -n '1,3p' /etc/passwd             #打印1到3行
[root@localhost~#sed -n'1~2p' /etc/passwd            #第1行开始,步长为2
[root@localhost~#sed -n '2~2p' /etc/passwd           #第2行开始,步长为2
[root@localhost~]#sed -n '2,+3p'/etc/passwd          #第2行以及后面的3行

②正则定位
[root@localhost~# grep ^root /etc/passwd                              #过滤root开头的行
[root@localhost~]#sed -n    '/^root/p'     /etc/passwd

[root@localhost~]# egrep   "[0-9]{3}"   /etc/passwd                #过滤包含3个数字的行
[root@localhost~# sed -rn   '/[0-9]{3}/p'  /etc/passwd

③sed 修改文件
p:打印行

d:删除行        #不使用-i ,源文件不会被修改
[root@localhost ~# sed  'd' /etc/hosts      #删除/etc/hosts全文,没有定位条件等于匹配所有行
[root@localhost ~# cat /etc/fstab>/tmp/fstab
[root@localhost ~# sed   '1,3d'  /tmp/fstab               #1到3行都删除
[root@localhost ~]# sed  '/dev/!d'  /tmp/fstab          #不包含dev的行都删除
[root@localhost ~]# sed '/^#/d’   /tmp/fstab            #删除所有以#符号开头的行
[root@localhost ~# sed   ‘/^$/d ‘  :/tmp/fstab           #删除空白行

c:替换行

s:替换关键词
s/OLD/NEW/      2代表对每行第二个匹配到的字符进行替换      #替换符/可用其他 字符代替
            g代表对每行所有能匹配到的字符进行替换
            P可以结合-n 选项只打印替换的行内容
            W可以把替换的行内容保持到指定的文件里
n,m s/OLD/NEW/            #第几行到第几行替换
s/^/添加的字符/          #在行首添加内容
s/$/添加的字符/          #在行尾添加内容

=:打印行号

④sed多行文本处理
i:插入
z:追加
r:读取文件|导入文件内容. 
w:文件另存为|导出文件内容
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值