【Linux】正则表达式-阿里云开发者社区

开发者社区> 般若灵芝> 正文

【Linux】正则表达式

简介:
+关注继续查看

基础正则表达式,通过grep选取字符串

1、'' 特定字符串

例:'the'

2、[] 集合字符

例:t[ea]st,test或tast;1o,o之前的字符不能为g;[0-9],任意数字字符串

3、$ 行尾 ^ 行首【^在字符集合符号([])之内表示反向选择,之外表示行首】

例:^the 一行以the开头;.$,表示一行以.号结束

4、. 任意一个字符【绝对有一个任意字符】

例:g.d,g和d之前有一个任意字符;g..d,g和d之前有两个任意字符

5、* 重复字符【重复0或多个前一个重复字符】

例:o,拥有空字符或一个o以上的字符;ooo,至少两个o以上的字符串;g.*g,开头结尾都是g的字符串

6、{} 限定连续重复字符范围,{n,m}连续重复n到m个前一个字符,【{在shell中的特殊意义,所以需要使用转义】

例:o{2},两个o的字符串,看似与ooo*差不多

正则表达式中的符号与通配符意义是不一样的,通配符*表示任意字符(0到多个),通配符中的反向选择为[!a],而正则表示式为2

扩展正则表达式,egrep支持扩展正则表达式

1、+ 重复一个或一个以上的字符

例:go+g,以g开头结尾,中间有一个或以上的o的字符串

2、? 0个或一个字符

例:go?d,gd或god

3、| 用或(or)的方式找出数个字符串

例:gd|good|goooood,或的关系

4、() 找出组字符串

例:g(la|oo|re)d,glad或good或gred;x(abc)+x,以x开头结尾,中间有多个abc的字符串

printf 格式化显示

语法:printf ‘打印格式’实际内容

a 警告声音输出

b 退格键(backspace)

f 清除屏幕(from feed)

n 输出新的一行

r 换行,即enter按键

t 水平的[tab]按键

v 垂直的[tab]按键

xNN NN为两位数的数字,可以转换数字成为字符【x45 输出E】

%ns n为数字,s代表string,即n个字符。

%ni n为数字,i代表integer,即多少个整数数字

%N.nf f代表floating,有小数位数,小数点后保留n位,整个浮点数占N位,多余的空格在数的前面

sed 分析标准输入的数据,然后将数据经过处理后,再将它输出到标准输出。

语法: sed [-nefr] [动作]

-n 使用安静模式,在一般sed的用法中,所有来自STDIN的数据一般都会显示在屏幕上,但如果加上-n参数,则只有经过sed的特殊处理的那一行才会显示出来

-e 直接在命令行模式上进行sed的操作编辑

-f 直接将sed的操作写在一个文件内,-f filename 则可以执行filename内的sed操作

-r sed的操作支持的是扩展正则表达式的语法(默认为基础表达式语法)

[n1[,n2]]function

n1,n2 不一定存在,一般代表“选择进行操作的行数”

function一般有以下操作,务必用’’两个单引号括住:

a 新增,a后面可以接字符串,这些字符串出现在当前的下一行

c 替换,c后面可以接字符串,这些字符串可以替换n1,n2之间的行

d 删除,d后面通常不接任何内容

i 插入,i后面可以接字符串,这些字符串出现在当前的上一行

P 打印,打印某个选择的数据,通常会和-n一起运用

s 搜索,不但可以搜索,还可以替换,通常与正则表达式一起运行【1,20s/old/new/g】

如果新增的不只一行,每行之间以反斜线来进行新行的增加

注:sed后面有超过一个以上的操作时,每个操作前需要加上-e

awk 相比常作用于整行处理的sed而言,awk倾向于一行中分成数个“字段”来处理,awk适合处理小型的数据。

语法:awk ‘条件类型1{动作1} 条件类型2{动作2}…’ filename

例:last 取出所有登录者信息

1、last | awk '{print $1 "\t" $3}'

$1,$3分别表示第一栏和第三栏,$0表示一整行数据

2、last | awk '{print $1 "t lines:" NR "t columes:" NF}'

NF 每一行($0)拥有的字段总数,NR 当前awk所处理的是“第几行”数据,FS 当前的分隔符,默认为空格键。

3、last | awk '{FS=":"} NR < 4 {print $1 "\t" $3}'

last | awk 'BEGIN{FS=":"} NR < 4 {print $1 "\t" $3}'

运用awk进行计算时,BEGIN表示预先设置awk变量,第一条命令的输出结果的第一行的分隔符不是:,第二条命令从第一行起分隔符便就是:

注意:awk后续的所有操作用’括住,所以如果想以print显示,记住,非变量的文字部分,包括printf的格式中,都需要使用双引号来定义

(1) 所有的操作即在{}内的操作,如果需要多个命令时,可使用分号分割,或者直接以enter按键来隔开每个命令。

(2) 格式化输出时,printf的格式设置中,务必加上n才能分行

(3) 与bash的变量不同,在awk中,变量可以直接使用,不需要加上$符号

文件比较

1、diff 一般用于ASCII纯文本文件或目录的比较

语法:diff [-bBi] fromfile tofile

-b 忽略一行中的多个空白的差异

-B 忽略空白行的不同

-i 忽略大小写的不同

例:diff -b "about me" "me"

2、cmp 主要用“位”为单位比较

语法:cmp [-s] oldfile newfile

-s 将所有不同点的位都列出来,因为cmp默认仅会输出第一个发现的不同点


  1. g
  2. a

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
10060 0
linux之shell的正则表达式
linux之shell的正则表达式 一、grep 文本过滤命令 grep命令是一种强大的文本搜索工具, 可以根据用户指定的“模式”对目标文本进行匹配检查,打印匹配到的行; 由正则表达式或者字符及基本文件字符所编写的过滤条件 1 2 3 -i ##表示不区分匹配条件的大小写 -ni .
2055 0
Linux基本操作 10----- 正则表达式与文件格式化处理
一 正则表达式     1 简单的说正则表达式就是处理字符串的方法,它是以行为单位来进行字符串的处理行为,正则表达式通过一些特殊符号的辅助,可以让用户轻易的达到查找,删除,替换某特定字符串的处理程序     2 grep在数据中查找一个字...
935 0
Linux系统学习之正则表达式
一、基础的正则表达式 1."."(一个点)符号 点符号用于U匹配除换行符号之外的任意一个字符。例如:r.t可以匹配rot、rut,但是不能匹配root,但如果使用r..t,就可以匹配root、ruut、r  t(中间是两个空格)等。
863 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
13874 0
linux中shell条件表达式总结
1.字符串比较 ! 取反 -n str     字符串 str 是否不为空 -z str     字符串 str 是否为空 str1  = str2     str1是否与 str2 相同 str1 != str2     str1是否与 str2 不同2.数值大小比较 int1 -eq int2     等于 int1 -le  int2     小于等于 int1
941 0
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
11888 0
学习 Linux,101: 使用正则表达式搜索文本文件
概述 本文深入介绍基础的 Linux 进程管理技术。您将学习如何: 创建简单的正则表达式 使用正则表达式搜索文件和文件系统 使用正则表达式和 sed 本文帮助您准备 Linux Professional Institute's Junior Level Administration (LPIC-1) 考试的 103 主题下的 103.7 考核目标。
833 0
+关注
13
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载