【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
相关文章
|
2月前
|
Linux Shell
Linux下的Shell基础——正则表达式入门(四)
Linux下的Shell基础——正则表达式入门(四)
25 1
Linux下的Shell基础——正则表达式入门(四)
|
8月前
|
Linux Shell Perl
第十一章、【Linux】正则表达式与文件格式化处理
第十一章、【Linux】正则表达式与文件格式化处理
53 0
|
6月前
|
Linux Perl
[笔记]linux grep之正则表达式
[笔记]linux grep之正则表达式
|
7月前
|
Unix Linux
如何在 Linux 中使用 Grep 和正则表达式进行文本搜索?
如何在 Linux 中使用 Grep 和正则表达式进行文本搜索?
197 5
|
10月前
|
机器学习/深度学习 NoSQL Linux
Linux行处理工具: grep 正则表达式
Linux行处理工具: grep 正则表达式
82 0
|
11月前
|
Linux Windows
【Linux命令篇】正则表达式浅析
转义字符是将普通字符转化为特殊字符的一种方式。 在正则表达式中,一些字符被定义为特殊字符(也称为元字符),它们具有特殊的含义。这些特殊字符包括:
129 0
|
Linux
Linux 命令合集 文本处理和正则表达式相关命令之一
Linux 命令合集 文本处理和正则表达式相关命令之一
114 1
Linux 命令合集 文本处理和正则表达式相关命令之一
|
Linux
Linux 命令合集 文本处理和正则表达式相关命令之三
Linux 命令合集 文本处理和正则表达式相关命令之三
95 0
Linux 命令合集 文本处理和正则表达式相关命令之三
|
Linux
Linux 命令合集 文本处理和正则表达式相关命令之四
Linux 命令合集 文本处理和正则表达式相关命令之四
92 0
Linux 命令合集 文本处理和正则表达式相关命令之四
|
Linux
Linux 命令合集 文本处理和正则表达式相关命令之五
Linux 命令合集 文本处理和正则表达式相关命令之五
78 0
Linux 命令合集 文本处理和正则表达式相关命令之五