正则表达式与文本格式化处理

正则表达式是通过一些特殊字符的排列,用以查找、替换、删除一行或多行文字字符串,简单地说,正则表达式就是用在字符串处理上面的一项“表示式”。正则表达式不是一个工具程序,二是一种字符处理的标准依据。

12.1前言:什么是正则表达式

正则表达式就是处理字符串的方法,它是以行为单位来进行字符串的处理行为,正则表达式通过一些特殊符号的辅助,可以让用户轻易达到查找删除替换某特定字符串的处理程序。



12.2基础正则表达式


用dmesg列出内核信息,再以grep找出内含eth的哪行

dmesg | grep ‘eth’

dmesg |grep -n --color=auto ’eth‘

dmesg |grep -n -A3 -B2 --color=auto 'eth'


grep在数据中查找一个字符串时,是以整行为单位来进行数据的选取的

alias grep=’grep --color=auto‘

再以source ~./bashrc来立即生效即可


grep练习:

查找特定字符串

-n显示行号


-v反向选择


-i忽视大小写



利用中括号[]查找集合字符















行首与行尾字符^$













grep -n '^$' cyf.txt找出空行


匹配一个字符.与重复字符*

.(小数点):代表一定有一个任意字符的意思

*(星号):代表重复前一个0到无穷多次的意思,为组合形态








限定连续RE字符范围{}





正则表达式的字符







sed工具

sed本身也是一个管道命令,可以分析standard input的,而且sed还可以将数据进行替换、删除、新增、选定特定行等功能



以行为单位的新增、删除功能

#将/etc/passwd的内容列出并且打印行号,同时,删除2-5行
nl /etc/passwd |grep '2,5d'
#在第二行后加上'drink tea'
nl /etc/passwd |sed '2a drink tea'




以行为单位的替换与现实功能




sed 's/要被替换的字符串/新的字符串/g'









直接修改文件内容(危险操作)

利用 sed 将 regular_express.txt 内每一行结尾若为 . 则换成 !

sed -i 's/\.$/\!/g' cyf.txt 

利用 sed 直接在 regular_express.txt 最后一行加入『# This is a test』

sed -i '$a # This is a test' regular_express.txt

12.3扩展正则表达式



12.4文件的格式化与相关处理


格式化打印:printf




awk:好用的数据处理工具

awk也还一个非常棒的数据处理工具。相比于sed常常作用域一整行的处理,awk则比较倾向于将一行分成数据“字段”来处理

awk适合处理小型的数据处理

格式:

awk '条件类垄1{劢作1} 条件类垄2{劢作2} ...' filename





整个awk的处理流程:

读入第一行,并将第一行的数据填入$0,$!,$2等变量当中;

依据条件类型的限制,判断是否需要进行后面的动作

做完所有的动作与条件类型

若还有后续的行的数据,则重复上面1-3的步骤指导所有的数据都度完为止

awk是以行为一次处理的单位,而以字段为最小的处理单位。





awk的逻辑运算符



在 /etc/passwd 当中是以冒号 ":" 来作为字段的分隔, 该档案中第一字段为账号,第三字段则是 UID。那假设我要查阅,第三栏小于 10 以下的数据,并且仅列出账号不第三栏,


为什么第一行没有正确显示?因为我们读入第一行的时候,那些变量$!,$2默认还是以空格为分割的,所以虽然我们定义了FS=“:”,但是却仅能在第二行后才开始生效。





 awk 的指令间隔:所有 awk的动作,即在 {} 内的动作,如果有需要多个指令辅助时,可利用分号『;』间隔, 或者直接以 [Enter] 按键杢隔开每个指令,例如上面的范例中,鸟哥共按了三次 [enter] 喔!
 逻辑运算当中,如果是『等于』的情况,则务必使用两个等号『==』!
 格式化输出时,在 printf 的格式设定当中,务必加上 \n ,才能进行分行!
 不 bash shell 的变量不同,在 awk 当中,变量可以直接使用不需加上 $ 符号。


文件的比较工具

通常同一个软件的不同版本之间,比较配置文件与源文件的区别。很多时候所谓的文件的比较,通常是用在ASCII纯文本文件的比较上。

比较的命令diff

可以通过cmp比较非纯文本文件,同时也能够通过diff创建分析文件

diff

diff就是用在比较两个文件之间的区别的,并且是以行为单位来比较的,一般是用ASCII纯文本文件的比较上。由于是一行为单位比较的单位,因此diff通常是用在同一的文件(或软件)的新旧版本区别上



cmp

cmp主要也是比较两个文件,它主要利用字节单位去比较。因此当然也可以比较二进制文件



patch

patch这个命令与diff可是密不可分的

diff是比较两个版本之间的区别

如果升级呢?就是将旧的文件升级为新的文件时应该怎么做?

就是先比较新旧版本的区别,并将区别文件制作称为补丁文件,在由补丁文件更新旧文件即可。


cp /etc/passwd /home/cyf/sh/passwd.old
cat /home/cyf/sh/passwd.old |sed -e '4d' -e '6c no six line' >passwd.new

一般使用diff制作出来的比较文件通常使用扩展名。patch

新文件看到-会删除,看到+会加入

更新新旧数据

还原旧文件的内荣



文件打印准备:pr




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yiluohan0307

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值