文本处理正则表达式

文本处理正则表达式

grep

文本过滤命令:全面搜索研究正则表达式并显示出来

grep 命令是一种强大的文本搜索工具 , 根据用户指定的“模式”对目标文本进行匹配检查 , 打印匹配到的行

由正则表达式或者字符及基本文本字符所编写的过滤条件

默认贪婪模式 ##有就能过滤出来
egrep = grep -E

扩展正则表达式
grep 正则表达式与扩展正则表达式
正规的grep不支持扩展的正则表达式子 , 竖线是用于表示”或”的扩展正则表达式元字符 , 正规的 grep 无法识别.
加上反斜杠 , 这个字符就被翻译成扩展正则表达式 , 就像 egrp 和 grep -E 一样

格式

grep 匹配条件 处理文件 
grep  root passwd 		##过滤有root的选项
grep ^root passwd 		##以root开头的选项
grep  root$ passwd 		##以root结尾的选项
grep -i "root" passwd 	##忽略大小写查找有root的项
grep -E "root|ROOT" passwd	
##扩展正则表达式;‘|‘或的关系root|ROOT都可以被过滤出来
grep  root passwd -n2	##过滤并显示这一行的上下各两行

字符的匹配次数设定
加在字符后面
'.'表示一个字符

* 			##字符出现0-任意次 
\? 			##字符出现0-1次 
\+ 			##字符出现1-任意次 
\{n\} 		##字符出现n次 
|{m,n\} 	##字符出现最少出现m次,最多出现n次
\{0,n\} 	##字符出现 0-n次 
\{m,\} 		##字符出现至少m次 
\(xy\)\{n\}xy 	##关键字出现n 次 
.* 			##关键字之间匹配任意字符
grep -E "x{1}y" file	##过滤x字符出现一次的项
grep -E "(xy){1,}" file ##过滤xy至少出现1次的项

字符的匹配位置设定

 ^ 关键字		##开头
 关键字 $ 		##结尾
 \< 关键字 		##只以这个单词开头
 关键字 \> 		##只以这个单词结尾
 \< 关键字 \>	##只含这个单词

sed

行编辑器:stream editor
用来操作纯 ASCII 码的文本

缓存空间
处理时 , 把当前处理的行存储在临时缓冲区中 , 称为“模式空间” (pattern space) 可以指定仅仅处理哪些行

sed符合模式条件的处理,不符合条件的不予处理
处理完成之后把缓冲区的内容送往屏幕
接着处理下一行 , 这样不断重复 , 直到文件末尾

p		##多显示
-n  p	##单显示
d		##不显示
!d = -n p
i		##上插入
a		##下添加
c		##剪切
w		##将某一行导入某文件
\ 		##表示转译 	
eg: \/  ##将有特殊含义的/转译为普通的/
N 		##提前加载文件中下一行到sed程序中
-i		##保存修改

p模式
显示

sed -n '/\:/p' file
sed -n '/xx$/p' file	
sed -n '/^xx/p^' file
sed -n '2,6p' file		##显示2-6行
sed -n '2;6!p' file		##不显示2和6行

d模式
不显示

sed '/^xx/d' file		##xx开头的不显示
sed '1,4d' file
sed -n '/^xx/!d' file	##显示xx开头的行

a模式

sed '/^xx/a\xxxx' file		##在xx开头的行下添加一行xxxx
sed '/^xx/a\xxxx\nxxxx' file	##在xx开头的行下添加两行xxxx

i模式

sed '/^UUID/i\hello sed\nwestos' file	##在UUID开头的行下添加两行

c模式
change

sed '/^UUID/c\hello sed\nwestos' file		##将UUID开头的行换成\hello sed\nwestos两行内容	

w模式

sed '/^xx/w /文件路径' file	##将xx开头的写入文件
sed -n '/^xx/w /文件路径' file
sed '/^xx/=' file				##在xx开头的行上方添加行号
sed '6r /文件路径' file		##将文件的第六行写入file文件

其他用法

sed -n '/^UUID/=' file
sed -n -e '/^UUID/p' -e '/^UUID/=' fstab
sed -e 's/brown/green/; s/dog/cat/' data
sed -f rulesfile file		##根据rulesfile的内容对文件做更改
sed 's/^\//#/'/etc/fstab	##把开头的/变成#
sed 's@^/@#@g'/etc/fstab
sed 's/\//#/'/etc/fstab		##把每一行的第一个/变成#
sed 's/\//#/g/'/etc/fstab	##全文的/变成#
sed 'G' data				##在每一行下方加空行
sed '$!G' data				##最后一行不加
sed '=' file | sed 'N; s/\n/ /'		##在文件每一行开头加行号
sed -n '$p' file			##查看最后一行

awk

linux 上面默认使用 gawk

awk 处理机制 :awk 会逐行处理文本 , 支持在处理第一行之前做一些准备工作 , 以及在处理完最后一行做一些总结性质的工作 , 在命令格式上分别体现如下 :

BEGIN{}: 读入第一行文本之前执行 , 一般用来初始化操作

{}: 逐行处理 , 逐行读入文本执行相应的处理 , 是最常见的编辑指令

END{}: 处理完最后一行文本之后执行 , 一般用来输出处理结果

用法

awk '{print FILENAME}' file			##打印文件名
awk '{print NR/NF}' file			##第NR行,有NF列
awk -F : '/^ro/{print}' /etc/passwd
awk -F : 'BEGIN{print "NAME"} {peint $1} END{print "END"}'		##:做分隔符打印第一部分,并在开头加上NAME,结尾加上END
awk -F : '/^[a-d]/{print $1,$6}' /etc/passwd
awk -F : '/^a|nologin$/{print $1,$7}' /etc/passwd
awk -F : '$6~/bin$/{print $1,$6}' /etc/passwd	##打印第六列是以bin结尾的行的1,6列
awk -F : '$7!~/nologin$/{print $1,$7}'  /etc/passwd
awk -F : '{print $0}'		##打印所有,带分隔符:
awk -F : '{print $1="";print $0}'	##第一列为0,打印剩下的,不带分隔符
eg:
ifconfig etho | awk '/inet\>/{print $2}'		##抓取eth0网卡的ip
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值