Linux正则表达式(笔记)

通配符:

用来匹配符合条件的文件名,适用于ls,find,cp命令,但是却不能用于处理字符串的。

* #匹配1-多个字符
find system.*

? #匹配1个内容
find shad?w

[] #匹配括号中的内容
find shado[a-z]

但是Linux中的正则表达式和通配符不是同一个概念。这个需要区分。

正则表达式:

用来在文件中匹配符合条件的字符串。适用于grep,awk,sed对文件的操作,在Linux shell 脚本中使用最频繁,用于对系统日志抽取出有用的信息。

#基本正则表达式
* #前一个字符匹配0次或任意多次
注意:如果要匹配一个a,要这样写"aa*",表示匹配至少含有一个a的行
如果"a*",则会匹配所有内容,包括空白行,因为*是表示匹配字符0次以上

. #匹配除换行符外任意一个字符
eg.--test.txt--
said
suud

s..d #匹配s和d之间有两个字符的行
#.*表示所有内容
#s.*d匹配一个行,s和d之间可以有任何字符


^ #匹配行首,如^hello表示匹配行首为hello的行 

$ #匹配行尾,如o$表示匹配行位


^$ #表示匹配空白行
[] #表示匹配中括号中的任意一个字符
[^] #表示匹配除中括号中的任意字符
\ 转意符 使特殊符号失去特殊作用
a\{n\} 将a字符匹配恰好n次
a\{n,\} 将a字符匹配n次以上
a\{n,m\}将a字符匹配n-m次
ab\{n,m\}c a和c之间有n-m个b 

以上是基本的正则表达式
如果要对文件中内容进行操作的话需要用到以下几个命令:cut,awk,sed

cut [选项] 文件名
-f 列号,提取第几列
-d 分割符,以什么为分割。默认分隔符为TAB键
eg. cut -d ":" -f 1,6 passwd 
#以:为分割符,提取文件passwd中的第1,6列
#这个命令一般用来提取有格式文件中的信息,如表格等。系统管理员可以使用cut对passwd中的用户进行提取后批量删除等操作。但是却存在一定局限性,不是很智能。如果分割符为空格的话,很难提取出想要的内容。
printf '输出类型输出格式' 输出内容
#其输出类型和输出格式类似与c语言中的printf格式
输出类型:
%ns 有n个字符
%ni 有n个整数
%m.nf 浮点数m,共有n个小数位
输出格式:
\t 分隔符
\b 退格
。。。

这条命令可以读取文件中的内容,对文件中的内容进行格式化输出,一般配合awk命令使用。
printf '%s/t%s/t%s\n' | cat student.txt
printf '%s/t%s/t%s\n' $(cat student.txt)
awk '条件{执行动作} .. '  文件名
条件即是关系表达式等,如果没有则是无条件执行
执行动作一般为格式化输出printf,流程控制语句。

eg.
df | awk '{printf $1 "\t" $5"\n"}' #在awk中的特殊意义需要用""括起。$1是将字段变为第一个变量,变量$0是文件名。

条件的使用:有BEGIN和END。begin则是在开始便执行,end则是在最后才执行
那有什么用呢
eg.
awk 'BEGIN{FS=":"}{printf $1"\t"$6"\n"}' passwd 
可以在开始将分隔符设置为":"。FS是内置变量,表示分隔符。
变量的比较
awk '$2>=60{printf $1"\t"$2"\n"}' student.txt
将第二字段大于60的行列出 
sed命令与awk命令相似。但是sed命令可以直接文件数据进行选取、替换、删除、新增的命令。
sed [选项] '动作' 文件名
选项:
-n对行进行处理
-i将操作保存到文件中
-e允许多条sed命令编辑,用;分隔

动作:
na 内容 #在n行中进行追加内容
ni 内容 #在n行中进行插入内容
nd #删除n行,n,md删除n-m行
np #打印n行
nc 内容 #第n行替换
s/旧字符/新字符/g 字符串替换
ns/旧字符/新字符/g 在n行中进行字符串替换

eg。
sed -n '2p' student #打印第二行
sed  '2c haha' student #将第二行替换为haha
sed -i  '3s/90/60/g' student #将第三行的90替换为60,并保存到文件中

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值