Sed命令和awk基础
Sed命令
概念:用无交互式的方式来编辑文本,又称流编辑模式:意思就是对文件里的内容从第一行开始,一行一行的处理数据,就是逐行处理,然后把整行发送到屏幕上
Sed也是支持正则表达式的,使用正则表达式加参数-r
处理过程:
- 先保存到一个临时缓存区
- 然后处理临时缓存区中的数据,发送到屏幕上
- 处理完临时缓存区的数据之后就会删除,接着处理下一行
- 直到最后一行处理完毕
注意:sed默认不会修改源文件数据,使用-i之后才会直接修改文件
格式:sed [选项] ‘[动作指令]’ 文件名
选项:-n 屏蔽默认输出
-e 执行多个sed指令
-i 直接修改源文件,
-i.bak 编辑源文件同时创造.bak备份文件
-r 使用拓展的正则表达式
动作指令:p 打印
s 替换指定字符串
d 删除行
a 在当前行下面插入文件
i 在当前行上面出入文件
c 把选定的行改为新的指定文件
r 读取文件,将一个独立文件的数据插入到当前数据流的指定位置
w 另存为
注意:动作指令是要用单引号或双引号括起来用
练习:只替换每行出现的第一个词
多行替换:
取ens33网卡ip地址
指定行号删除
在文件尾部添加新内容
修改selinux文件
去除行首数字
第六章awk应用
1.awk的基础应用
概念:AWK是一种优良的文本处理工具,Linux及Unix环境中现有的功能最强大的数据处理引擎之一
awk:它是一个数据处理工具,也是一个逐行扫描文件。
格式:awk [-F field-separator] ‘commands’ filename
[-F field-separator]:这个选项如果是空文件则不必加,如果是像/etc/passwd文件则此文件各域以冒号作为分隔符,则必须指明-F选项,如:awk -F:
'commands’是要执行的命令动作
filename 处理的文件名,可以是多于一个文件的文件列表,awk将按顺序处理列表中的每个文件。
在不指名-F域分隔符的情况下,默认的域分隔符是空格或tab键。
常用选项:-F 指定以fs作为输入行的分隔符
-v 设置一个变量,初始值为val
完整格式:awk [-F field-separator] ‘匹配规则{执行命令}’ filename
任何awk语句都是由’匹配规则{执行命令}'组成,一个awk中可以有多个语句
匹配规则:“条件类型;awk保留字:BEGIN和END
关系做算符:> ,<,>=,<=,==,!=不等于
匹配表达式:~(匹配) !~(不匹配)
正则表达式:/正则/可以写入字符,可以支持正则表达式
逻辑运算符:&&逻辑与 || 逻辑或”
awk 使用数据字段变量
在 awk 中,默认的字段分隔符是任意的空白字符(例如空格或制表符)。
在文本行中,每个数据字段都是通过字段分隔符划分的(-F选项指定的分隔符)
awk 的主要特性之一是其处理文本文件中数据的能力,它会自动给一行中的每个数据字段分配一个变量
$0 代表整个文本行;
$1 代表文本行中的第 1 个数据字段;
$2 代表文本行中的第 2 个数据字段;
$n 代表文本行中的第 n 个数据字段。
执行命令:awk的执行命令在大括号{ }内指明。动作大多数用来打印(即print指令)
动作 action: 格式化输出print 流程控制语句if ,while,for
BEGIN和END
语法:awk [options] ‘BEGIN{ print “start” } 匹配规则{ commands } END{ print “end” }’ filename
因为BEGIN和END是关键字。所以必须大写,这两部分是开始块和结束块
BEGIN:旦BEGIN后的动作执行一次,当awk开始从文件中读入数据时,BEGIN 的条件就不再成立,所以BEGIN定义的动作只能被执行一次
通过BEGIN开始块来设置变量和标题
END:ND也是awk的保留字,不过刚好和 BEGIN 相反。END 是在 awk 程序处理完所有数据,即将结束时执行的。END 后的动作只在程序结束时执行一次。