Bash之正则表达式

正则表达式,又叫规则表达式,通常被用来检索、替换那些符合某个模式(规则)的文本。正则表达式分为基本正则表达式和扩展正则表达式,扩展正则表达式添加了一些更加丰富的匹配规则而成。

1 grep:文本查找、过滤工具。根据模式搜索文本,并将符合模式的文本显示出来。

格式:grep  [选项]  [模式]  file

选项:-i     忽略大小写

-v    显示未被模式匹配的行

-n    显示行号

-r    递归查找

--color    用颜色显示

查找包含root的行:

[[email protected] log]# grep "root" /etc/passwd

root:x:0:0:root:/root:/bin/bash

operator:x:11:0:operator:/root:/sbin/nologin

查找包含至少一个r的行(*:匹配其前字符任意次)

[[email protected] log]# grep --color "rr*" /etc/passwd

root:x:0:0:root:/root:/bin/bash

adm:x:3:4:adm:/var/adm:/sbin/nologin

查找包含oot或ost的行([]:匹配范围内任意单个字符)

[[email protected] ~]# grep --color o[os]t /etc/passwd

root:x:0:0:root:/root:/bin/bash

operator:x:11:0:operator:/root:/sbin/nologin

postfix:x:89:89::/var/spool/postfix:/sbin/nologin

查找包含数字0-9的行

[[email protected] ~]# grep --color [0-9] /etc/passwd

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

adm:x:3:4:adm:/var/adm:/sbin/nologin

查找以root开始的行

[[email protected] ~]# grep "^root" /etc/passwd

root:x:0:0:root:/root:/bin/bash

查找以nologin结尾的行

[[email protected] ~]# grep "nologin$" /etc/passwd

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

adm:x:3:4:adm:/var/adm:/sbin/nologin

过滤空白行

[[email protected] ~]# grep ^$ backpasswd

查看当前目录下包含root的行

[[email protected] ~]# grep -r root ./

./anaconda-ks.cfg:rootpw  --iscrypted $6$K8rYflMst4cLGPIp$Dt8SHV9uPN/w4N3tQPAvyPFYjCCM5RHRRBcJf7NOP7MmqVFG1n0UYrfbgs7mDQ8KvobzHpC8R0Q3U.QUII38o.

./backpasswd:root:x:0:0:root:/root:/bin/bash

./backpasswd:operator:x:11:0:operator:/root:/sbin/nologin

./install.log:Installing rootfiles-8.1-6.1.el6.noarch

./install.log:Installing fakeroot-libs-1.12.2-22.2.el6.i686

./install.log:Installing fakeroot-1.12.2-22.2.el6.i686

查找出现数字2或5的行:

[[email protected] ~]# egrep "(2|5)" c.txt

2

553

2 sed:行编辑器,逐行处理文本文件,主要用于过滤和替换操作,适合处理大数据文件,sed默认并不直接修改源文件。

格式:sed  [选项]  [模式]  file    其中模式如果是正则表达式,表示方式为:/正则表达式/

选项:--help    显示帮助

-n    只显示匹配的行

-e    允许执行多个操作

-i    修改原文件

-f    指定文件

-r    使用扩展正则表达式

模式:  d    删除

p    打印

s    替换,如s/a/b/g,把a替换成b,g代表全局替换

w file    把模式空间的内容保存到文件中

a\     在当前行后面加入文本

i\      在当前行前面加入文本

r  file    把文件内容添加到符合条件处

[[email protected] ~]# sed -n ‘1,2p‘ /etc/passwd            #只打印前2行

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

[[email protected] ~]# sed -e ‘1,3p‘ -e ‘5d‘ c.txt          #执行多个操作

[[email protected] ~]# sed -i ‘s/5/66/g‘ c.txt              #直接修改源文件

[[email protected] ~]# sed ‘1,3d‘ c.txt                     #删除前3行

[[email protected] ~]# sed ‘1,3w /root/a.txt‘ c.txt         #把1至3行保存到a.txt文件中

[[email protected] ~]# sed ‘2a\ccc‘ c.txt                   #在第2行后面添加ccc

[[email protected] ~]# sed ‘2i\ccc‘ c.txt                   #在第2行前面添加ccc

[[email protected] ~]# sed ‘/3$/a\abcdefg‘ c.txt            #//表示正则匹配

[[email protected] ~]# vim d.sh                             #创建一个sed脚本

/^3/d

[[email protected] ~]# sed -f d.sh c.txt                    #以3开始的行被删除

66

66

66

660000

[[email protected] ~]# sed ‘2q‘ c.txt                       #显示前2行后退出

66

66

3 awk:是一种编程语言,也是优秀的报告生成器,按某种格式显示,是强大的数据处理引擎。

格式:awk [选项] ‘模式 {动作}‘ file... 其中模式如果是正则表达式,表示方式为:/正则表达式/

选项:-F    指定分隔符

-v value=a    在执行处理过程之前,设置一个变量

-f    从脚本文件中读取指令

内置变量:

NF    当前记录的字段个数

OFS   输出字段分隔符,默认空格

NR    输入流的当前记录编号

FS    字段分隔符,需要在BEGIN处定义

表达式和操作符

a=1  自定义变量

+    加

-    减

>    大于

<    小于

&&   与

||   或

==   等于

!=  不等于

~    匹配

!~  不匹配

......

[[email protected] ~]# awk ‘/!ok/‘ a.txt                    #没有指定动作,默认为打印

[[email protected] ~]# vim a.sh                             #编辑awk脚本

/^$/ {print "abc"}                                       #通过正则匹配空白行,并打印abc

[[email protected] ~]# awk -f a.sh a.txt

abc

abc

[[email protected] ~]# awk -F : ‘{print $2,$3}‘ /etc/passwd #指定分隔符,打印2,3字段

x 0

x 1

x 2

[[email protected] ~]# echo a b c | awk ‘{print $NF}‘        #打印输出行最后一个字段

c

[[email protected] ~]# echo a b c | awk ‘{print NF}‘         #显示输出行字段的个数

3

[[email protected] ~]# echo a b c | awk ‘BEGIN{OFS="-"}{print $1,$2,$3}‘    #输出分隔符

a-b-c

[[email protected] ~]# echo "cc" | awk ‘a=3 {print a+1}‘     #自定义变量和计算

4

[[email protected] ~]# awk -F : ‘$1~/root/ {print $3}‘ /etc/passwd        #打印rootID号

0

[[email protected] ~]# awk -F : ‘$3>500 {print $1}‘ /etc/passwd           #打印>500的ID号

nfsnobody

abc

[[email protected] ~]# df -h | grep "boot" | awk ‘{if($4<200) print "no" ;else print "ok"}‘

no

#条件表达式,判断boot分区的空间,注意格式

时间: 2024-11-03 13:06:50

Bash之正则表达式的相关文章

Linux Bash之正则表达式

首先注意:正则表达式与通配符是完全不同的概念.通配符 (wildcard) 代表的是 Bash 操作接口的一个功能,而正则表达式是一种字符串处理的表示方式,一定要区分开来. 正则表达式 (Regular Expression) 是通过一些特殊字符的排列,用以查找/替换/删除一行或多行文字字符串.也即是说,正则表达式是用在字符串处理上的一项表达式,它不是一个工具程序,而是一个字符串处理的标准依据,如果我们想以正则表达式的方式处理字符串,就要使用支持正则表达式的工具程序,如 vim.sed.awk.

bash 正则表达式进阶--egrep

bash的正则表达式有些特殊的用法,需要使用egrep来替代grep语句: 1. "+" 重复前一个字符re至少一次(这里要区别".",也即重复0或者更多次) 2. "?" 重复前一个字符0或者1次 3. "|" 或者的意思,匹配前或者匹配后都算匹配成功 4. "()" 群组匹配,我的理解(就是把括号内的内容当作一个整体去匹配) 5. "()+" 重复括号内的内容至少一次 原文地址:ht

Linux正则表达式grep与egrep

Linux正则表达式grep与egrep 正则表达式:它是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串.在很多文本编辑器或其他工具里,正则表达式通常被用来检索或替换那些符合某个模式的文本内容.其实正则表达式,只是一种思想,一种表示方法.只要我们使用的工具支持表示这种思想那么这个工具就可以处理正则表达式的字符串.常用的工具有grep, sed, awk,这三个都是针对文本的行才操作的. grep  过滤器语法: grep  [-cinvABC]  'word'  filenam

grep文本查看工具及正则表达式

grep文本查看工具及正则表达式 grep:搜索及过滤文本工具: (根据用户所指定的"模式"搜索,过滤条件"对目标文件进行过滤性匹配):grep自带正则表达式引擎工具. 所谓模式:由正则表达式所得元字符及普通文本字符所编写出来的过滤条件"模式" grep:三种支持模式: grep:基本正则表达式 egrep:支持扩展正则表达式 fgrep :不支持正则表达式 三种支持模式因其可以(grep -E:切换扩展,egrep-G:切换基本,分别有以-F切换fgre

通配符、正则表达式的记录

一.通配中的元字符的意义如下(不使用正则表达式): * 表示任意多的任意字符 ? 表示一个任意字符 ^ 表示取反 [] 同正则表达式的用法 {} 表示一组表达式的集合 {}中表达式是或的关系 如 ls -l {*.cpp,[1234]*.c} 列出满足表达式*.cpp 或者[1234]*.c的文件 二.正则表达式 bash shell本身不支持正则表达式,使用正则表达式的是shell的一些命令和工具,如grep,sed ,awk bash可以使用正则表达式中的一些元字符实现通配的功能. 1.基本

linux基础入门之文件管理类命令

文件管理类命令 命令和选项 command [options] [arguments] 命令      选项    参数 选项 短选项-   例(-h -l -a) 短选项可组合 例(-hla) 有些命令短选项可以不带-, 通常称作BSD风格的选项 例(ps aux ,tar xf) 有些选项需要带参数 tail -n 2 /etc/passwd 长选项不能组合 --help --list 如果需要参数 长选项的参数通常需要=号  --size=1G 命令后的参数就是命令的作用对象 例:ls /

关于文件查找和解压缩

文件查找和解压缩在文件系统上查找符合条件的文件,文件查找的工具有两个,locate 和 find文件查找分为:            locate      非实时查找 (在数据库查找)             updatedb   更新数据库            经常用于搜索稳定的文件,比如配置文件            var/lib/mlocate/mlocate.db 数据库路径             find     实时查找 locate :       查询系统上预建的文件索引

Linux三剑客之一sed用法

sed是一种流编辑器,主要针对文本行进行处理,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为"模式空间"(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕.然后读入下行,执行下一个循环.如果没有使诸如'D'的特殊命令,那会在两个循环之间清空模式空间,但不会清空保留空间.这样不断重复,直到文件末尾.文件内容并没有改变,除非你使用重定向存储输出. 主要功能为主要用来自动编辑一个或多个文件,简化对文件的反复操作,编写转换

新手必知linux基础知识

1.用颜色代表不同文件 白色:普通文件 红色:压缩文件 蓝色:目录文件 浅蓝色:链接文件 ***:设备文件(/dev) 绿色:可执行文件(/bin./sbin) 粉红色:图片文件 2.目录代表意义 符号 意义 . 当前工作目录 .. 父目录 ~ 用户家目录 - 上个工作目录 3.linux的目录结构 目录 说明 / Linux文件系统的入口,也是处于最高一级的目录 /bin 基本系统所需要的命令.功能和/usr/bin类似,这个目录中的文件都是可执行的,普通用户都可以使用的命令 /boot 内核