正则表达式及文本三剑客grep,awk,sed

目录

正则表达式

前瞻

代表字符

表示次数

位置锚定

分组或其他

grep

选项

范例

awk

前瞻

awk常见的内置变量

范例

sed

前瞻

sed格式

范例

搜索替代

格式

范例

分组后项引用

格式

范例


正则表达式

前瞻

通配符:匹配的是文件名

正则表达式:匹配的是文章中的字符

元字符:不代表本来的含义,在正则表达式中有特殊含义的字符

正则表达式的表现

  • 代表字符
  • 表示次数
  • 位置锚定
  • 分组或其他

代表字符

.    匹配任意单个字符,可以是一个汉字  

[ ]   匹配指定范围内的任意单个字符

[^ ] 匹配指定范围外的任意单个字符

[:lower:] = [a-z]  :小写字母

[:upper:] = [A-Z] :大写字母

[:alpha:] = [a-zA-Z] :所有字母(大小写)

[:alnum:] :字母和数字

[:blank:] :空白字符(空格和制表符)

[:space:] 包括空格、制表符(水平和垂直)、换行符、回车符等各种类型的空白,比[:blank:]包含的范围广

表示次数

* #匹配前面的字符任意次,包括0次,贪婪模式:尽可能长的匹配

.* #任意长度的任意字符,不包括0次

\? #匹配其前面的字符出现0次或1次,即:可有可无

\+ #匹配其前面的字符出现最少1次,即:肯定有且 >=1 次

\{n\} #匹配前面的字符n次

\{m,n\} #匹配前面的字符至少m次,至多n次

\{,n\}  #匹配前面的字符至多n次,<=n

\{n,\}  #匹配前面的字符至少n次

位置锚定

^ :行首锚定, 用于模式的最左侧


$ :行尾锚定,用于模式的最右侧


^......$ #用于模式匹配整行 


^$ #空行

^[[:space:]]*$ #  空白行


\< 或 \b        #词首锚定,用于单词模式的左侧(连续的数字,字母,下划线都算单词内部)

\> 或 \b        #词尾锚定,用于单词模式的右侧

\<PATTERN\>     #匹配整个单词

注:除了字母,数字,下划线,其他都算单词的分隔符

分组或其他

分组:( ) 将多个字符捆绑在一起,当作一个整体处理

grep

选项

-m  # 匹配#次后停止

grep -m 1 root /etc/passwd   #多个匹配只取第一个

-v 显示不被pattern匹配到的行,即取反

grep -Ev '^[[:space:]]*#|^$' /etc/fstab

-i 忽略字符大小写

-n 显示匹配的行号

-c 统计匹配的行数

grep -c root /etc/passwd    #统计匹配到的行数

-o 仅显示匹配到的字符串

-q 静默模式,不输出任何信息

-A # after, 后#行 

grep -A3 root /etc/passwd   #匹配到的行后3行业显示出来

-B # before, 前#行

-C # context, 前后各#行

-e 实现多个选项间的逻辑or关系,如:grep –e ‘cat ' -e ‘dog' file

grep -e root -e bash /etc/passwd #包含root或者包含bash 的行

grep -E root|bash  /etc/passwd

-w 匹配整个单词

grep -w root /etc/passwd

useradd rooter

-E 使用ERE,相当于egrep

-F 不支持正则表达式,相当于fgrep

-f   file 根据模式文件,处理两个文件相同内容 把第一个文件作为匹配条件

-r   递归目录,但不处理软链接

-R   递归目录,但处理软链接

范例

awk

前瞻

vim:文本处理工具,内存不足,打不开超大文件,把整个文件加载到内存中,如果内存不够大,或者文件过大,就打不开文件

awk:文本处理工具,加载一行,处理一行

格式:awk   选项  `表达式(处理动作)`

表达式:awk的语言的表达式

  • 不写没有
  • 找到特定的行

处理动作:

  • print:打印
  • printf:打印

常见选项:

  • -F :指定分隔符
  • -v:指定变量
  • -f:脚本

awk常见的内置变量

NF:当前处理的行的字段个数

NR:当前处理的行的行号(序数)

$0:当前处理的行的整行内容

$n:当前处理行的第n个字段(第n列)

范例

sed

前瞻

Sed是从文件或管道中读取一行,处理一行,输出一行;再读取一行,再处理一行,再输出一行,直到最后一行。每当处理一行时,把当前处理的行存储在临时缓冲区中,称为模式空间(PatternSpace),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。一次处理一行的设计模式使得sed性能很高,sed在读取大文件时不会出现卡顿的现象。
 

sed格式

sed 命令选项 '自身脚本语法'

常见命令选项

  • -n :不输出模式空间内容到屏幕,即不自动打印
  • -e :多点编辑
  • -i :实际修改
  • -i.abc :实际修改前先备份源文件,产生以源文件名字为前缀,以.abc为后缀的备份文件
  • -r:使用拓展正则表达式

注:

  • -ir 不支持
  • -i -r 支持
  • -ri  支持
  • -ni  会清空文件

常见脚本自身语法选项

  • p:手动打印
  • q:退出
  • d:删除
  • a:在下一行追加
  • i:在前一行插入
  • c:替换

范例

搜索替代

格式

sed 选项 '范围/旧字符/新字符/修饰符' 路径

范例

分组后项引用

格式

sed 选项 '范围/定义的分组/\留下的组/修饰符' 文件路径

范例

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值