Linux开发起步学习笔记(3)----正则表达式

正则表达式:

字符串匹配操作和替换操作
描述一个字符串的模式
正则表达式规则用于文本处理场合,与文件名通配符规则不同
不同软件定义

特殊字符

6个:. * [ \ ^ $
转义:用反斜线取消特殊字符的特殊含义

单字符正则表达式:

非特殊字符与自身匹配
. 匹配任何字符
[abcd]表示集合,与集合中任意一个元素匹配
. * \ 在集合中表示本身,不是特殊字符
用 - 定义一个区间[a-d]
[][]集合中左右 中括号 中的两个字符
[ad-]
^表示补集,只能放在开头,[^a-z]表示匹配非小写字母

单字符正则表达式的组合

串接:

[A-Z].[0-9].
*:任何单字符正则表达式后跟一个*,则表示匹配此单字符正则表达式的0次或任意多次出现 eg. 12*4和1224、14、122224匹配 [A-Z][0-9]* 和A,A1,B25,D123465匹配

锚点:

匹配的字符串必须处在某个位置
$有特殊意义,否则与其自身匹配。eg. 123$匹配文件行尾的123,不在行尾的123不匹配 $123只与$123匹配,. $与行尾任意字符匹配
^在首部时有特殊意义,否则与自身匹配。eg. ^printf只匹配行首的printf,不在行首不匹配。

ERE:扩展的正则表达式

(xy)*匹配xyxyxyxyxy
(pink|green)与两个中的一个匹配
+:表示至少出现1次
?:表示出现1次或0次
限定重复次数{m,n},如[1-9][0-9]\{6,8}表示匹配7-9位数字
[[:xdigit:]]表示所有十六进制数字
\d数字
\D非数字

正则表达式相关处理命令

grep/egrep/fgrep:在文件中查找字符串(筛选)
grep 模式 文件名列表
egrep使用扩展正则表达式进行搜索
fgrep使用快速搜索指定字符串,而不是模式(正则表达式)搜索
-F:固定字符串 -G:基本正则表达式 –E:扩展正则表达式
man pcresynatx
-n 显示行号 –v 显示所有不包含模式的行 –i 忽略字母大小写
eg. grep –v [D d]isable dev.stat > dev.active

sed:流编辑(加工)

sed ‘命令’ 文件名列表
sed –e ‘命令1’ –e ‘命令2’ –e ‘命令3’ 文件名列表
sed –f 命令文件 文件名列表
eg. tail –f pppd.log | sed ‘s/145.37.23.26/桥西/g’(s/源/目标/是替换操作,将145.37.23.26替换为桥西,g表示一行中出现多次的话均替换)
扩展的模式描述中增加(和)不影响匹配,使用\0(全部)、\1、\2表示匹配到的以括号为单位的字符串,如:s/([0-9]*[0-9]\)- ([0-9]*[0-9]\)- ([0-9][0-9]*\)/\3.\1.\2/g

awk:逐行扫描进行文本处理(筛选与加工)

awk ‘程序’ 文件名列表
awk –f 程序文件名 文件名列表
程序:条件 {动作}
awk ‘条件{动作}’ 文件名列表
Linux开发起步学习笔记(3)----正则表达式_第1张图片

条件:使用与C语言类似的关系、逻辑符;使用正则表达式的模式匹配,包含该模式的行执行动作;特殊的条件:无条件,BEGIN 开始处理所有文本行之前的动作,END处理完成所有文本行之后的动作。
$2 ~ “[1-9][0-9]*” 文本的第二列必须和后面的正则表达式进行匹配
print 变量1,变量2,……
printf(“格式串”,变量1,变量2,……)
eg. ps –ef | awk ‘ /guest/{printf(“%d,%s”,NR,$2);} ’ (/guest/表示找到有guest的行)

应用示例:
在这里插入图片描述
在这里插入图片描述

你可能感兴趣的:(Linux学习记录,Linux)