Linux正则表达式
grep搜寻字符串的五种情况
- 搜索特定字符串
- 使用[]搜索字符.^在字符集合符号([])代表反向选择,在[]之外代表定位在行首
- 行首与行尾字符^$
- 任意一个字符.(有且仅有一个,使用时需用转义字符\将.转变成普通字符)与重复字符*(0个或多个)
- 限定连续重复字符范围{}
字符集合使用的几种情况
????1)[range]????仅代表一个待搜索的字符
????2)[^range]????反向选择,与[range]相反
????3)\{n\}????重复前一个相同字符n个
????4)\{n,m\}????重复前一个相同字符n-m个
????5)\{n, \}????重复前一个相同字符n个以上
?
在万用字符当中,*代表0到无限多个字符的意思。在正则表达式中,*表示重复前一个字符0到无限多个的意思
?
printf ‘打印格式‘ 实际内容
????参数\a????????警告声音输出
????参数\b????????退格键(backspace)
????参数\f????????清除屏幕
????参数\n????????输出新的一行
????参数\r????????Enter键
????参数\t????????水平的tab按键
????参数\v????????垂直的tab按键
????参数\xNN????NN为两位数,可以转换数字成为字符
?
?????上一个执行命令所回传的值
$????表示当前shell的进程号
?
▲sed工具
sed是一个非交互式文本流编辑器,必须通过行号或正则表达式指定要改变的行。
sed读取数据流程:sed从文件的一个文本行或从标准输入读取数据,将读取的数据拷贝到一个编辑缓冲区,然后读命令行或脚本的第一条命令,并使用这些查找模式或定位行号来编辑它。重复此过程直到命令结束。
调用sed的方式:
- 在命令行键入命令????sed [选项] sed命令 输入文件
- 将sed命令插入脚本文件,然后调用sed????????sed [选项] –f sed脚本文件 输入文件
- 将sed命令插入脚本文件,并使sed脚本执行????????sed脚本文件 [选项] 输入文件
sed [-nef] [动作]
????参数-n????????所有来自STDIN的数据都不打印。只有经过sed特殊处理的那一行才会显示出来
????参数-e????????直接在指令行模式上进行sed的动作编辑
????参数-f????????直接将sed的动作写在一个档案内,-f filename则可以执行filename内的sed动作
????动作说明????[n1,[n2]]function
????????n1,n2不一定存在,一般代表选择进行动作的行数。
?
function有如下这些:
????a????新增。a的后面可以接字符串(在添加行的下一行出现)
????i????插入。i的后面可以接字符串(在添加行的上一行出现)
????c????取代。c的后面可以接字符串(可以取代n1,n2之间的行)
????d????删除。d的后面通常不接内容????
????p????打印。P常与n一起使用
????s????取代。可以直接进行取代工作。通常搭配正则表达式。
?
使用sed在文件中定位文本的方式
X | x为一行号 |
x,y | 行号范围从x到y |
/pattern/ | 查询包含模式的行 |
/pattern/pattern/ | 查询包含两个模式的行 |
/pattern/,x或x,/pattern/ | 通过行号和模式查询匹配字 |
x,y! | 查询不包含指定行号x和y的行 |
?
sed编辑命令
p | 打印匹配行 | q | 第一个模式匹配完成后退出或立即退出 |
= | 显示文件行号 | l | 显示与八进制ASCII代码等价的控制字符 |
a\ | 在定位行号后附加新文本信息 | {} | 在定位行执行的命令组 |
i\ | 在定位行号后插入新文本信息 | n | 从另一个文件中读文本下一行,并附加在下一行 |
d | 删除定位行 | g | 将匹配的那一行用空行代替 |
c\ | 用新闻本替换定位文本 | y | 传送字符 |
s | 使用替换模式替换相应模式 | n | 延续到下一输入行,允许跨行的模式匹配语句 |
r | 从另一个文件中读文本 | G | 添加一个空行 |
w | 写文本到一个文件 | ? | ? |
?
如果需要对同一文件或同一行进行多次修改有以下方法:
????1)使用-e参数????cat file | sed ‘s/old1/new1/‘ –e ‘s/old2/new2‘
????2)使用分号;????????cat file | sed ‘s/old1/new1/;s/old2/new2‘
????3)多行????????cat file | sed ‘
????????????????s/old1/new1
????????????????s/old2/new2‘
?
创建sed脚本????????vi allsed.sed
?
▲AWK介绍
调用awk的三种方法
????1)命令行方式????awk [-F field-separator] ‘‘ input-file
????2)将awk写入脚本,并以awk命令解释器(#!/bin/awk -f)作为脚本的首行,设置脚本有可执行权限,通过键入脚本名称来调用它
????3)将awk命令插入一个单独文件然后执行
注:如果设置了-F参数,则awk每次读一条记录或一行,并使用指定的分隔符分割指定域。但如果未设置-F选项,awk假定空格为域分隔符,并保持这个设置直到发现一新行。当新行出现时,awk命令获悉已读完整条记录,然后再下一个记录启动读命令,这个读进程将持续到文件尾或文件不再存在。
注:awk语句都由模式和动作组成。省略模式部分,动作将时刻保持执行状态。模式可以是任何条件语句或复合语句或正则表达式。模式包括两个特殊字段BEGIN和END。BEGIN语句使用在任何文本浏览动作之前,之后文本浏览动作依据输入文件开始执行。END语句用来在awk完成文本浏览动作后打印相关信息。实际动作在大括号{}内指明。
awk ‘BEGIN{print "this is the start…"} {print $1,$2,$3,…} END{print "this is the end"}‘ filename
?
域和记录????域标记为$1,$2…$n。$0为行信息
元字符????????\ ^ $ . [ ] | * + ?
+ ?????????只适用于awk而不适用于grep或sed。+匹配一个或多个字符。?匹配0个或1个字符
~????????匹配正则表达式。!~是不匹配正则表达式
=????????等于。!=不等于。
++ --????????前缀和后缀
?
awk内置变量
ARGC????????命令行参数个数
ARGV????????命令行参数排列
ENVIRON????支持队列中系统环境变量的使用
FILENAME????awk浏览的文件名
FNS????????浏览文件的记录数
FS????????设置输入域分隔符,等价于命令行-F选项
NF????????浏览记录的域个数
NR????????已读的记录数
OFS????????输出域分隔符
ORS????????输出记录分隔符
RS????????控制记录分隔符
?
awk内置的字符串函数
gsub(r,s)????在整个$0中用s替代r
gsub(r,s,t)????在整个t中用s替代r
index(s,t)????返回s中字符串t的第一位置
length(s)????返回s的长度
match(s,r)????测试s是否包含匹配r的字符串
split(s,a,fs)????在fs上将s分成序列a
sub(r,s)????????用$0中最左边最长的子串代替s
substr(s,p)????返回字符串s中从p开始的后缀部分
substr(s,p,n)????返回字符串s中从p开始长度为n的后缀部分
sprint(fmt,exp)????返回经fmt格式化后exp
?
字符串屏蔽序列
\b退格键????\t tab键????\f走纸换页
\ddd八进制值????????????\n新行
\c任意其他特殊字符????????\r回车键
?
printf修饰符和格式
修饰符
????-左对齐
????Width域的步长
????.prec最大字符串长度,或小数点右边的位数
格式
????%c????ASCII字符
????%d或i????整数
????%e或E????浮点数,科学计数法
????%f????浮点数,带小数点
????%g????awk决定使用哪种浮点数转换e或f
????%o????八进制数
????%s????字符串
????%x????十六进制数
?
awk内置数值函数
????int(x)
????sqrt(x)
????exp(x)
????sin(x)
????rand()????????得到一个随机数(介于0到1之间)
?
diff [-bBi] from-file to-file
????参数-a????????将所有文件当作文本文件来处理
????参数-b????????忽略空格造成的不同
????参数-B????????忽略空行造成的不同
????参数-c????????使用纲要输出格式
????参数-i????????忽略大小写的变化
?
cmp [] file1 file2????diff主要以"行"为单位比对,cmp以"位"为单位去比对
????参数-s????????print nothing for differing files;return exit status only
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。