shell脚本中的sed与awk
@1.sed编辑器
1.什么是sed编辑器?
sed是一种流编辑器,流编辑器会在编辑器处理数据之前基于预先提供的—组规则来编辑数据流
2.sed编辑器作用
sed编辑器可以根据命令来处理数据流中的数据,这些命令要么从命令行中输入,要么存储在一个命令文本文件中
3.sed的工作流程
4.命令格式
常用选项
[*]-e 或--expression=: 表示用指定命令来处理输入的文本文件,只有一个操作命令时可省略, 一般在执行多个操作命令使用
[*]-f 或--file=: 表示用指定的脚本文件来处理输入的文本文件
[*]-h 或--help: 显示帮助
[*]-n、--quiet 或 silent: 禁止sed编辑器输出,但可以与p命令一起使用完成输出
--i: 直接修改目标文本文件
常见操作
[*]s: 替换,替换指定字符
[*]d: 删除,删除选定的行
[*]a: 增加,在当前行下面增加一行指定内容
[*]i: 插入,在选定行上面插入一行指定内容
[*]c: 替换,将选定行替换为指定内容
[*]y: 字符转换,转换前后的字符长度必须相同
[*]p: 打印,如果同时指定行,表示打印指定行;如果不指定行,则表示打印所有内容;如果有非打印字符,则以ASCII码输出。其通常与“-n”选项一起使用
=: 打印行号
[*]l (小写L): 打印数据流中的文本和不可打印的ASCII字符(比如结束符$、制表符\t)5.打印内容
6.用文本模式来过滤出行
7.删除行
8.替换
行范围 s/旧字符串/新字符串/替换标记
4种替换标记:
· 数字: 表明新字符串将替换第几处匹配的地方
· g: 表明新字符串将会替换所有匹配的地方
· P: 打印与替换命令匹配的行,与-n一起使用
· w文件: 将替换的结果写到文件中
2.awk
1.工作原理
逐行读取文本,默认以空格或tab键为分隔符进行分隔,将分隔所得的各个字段保存到内建变量中,并按模式或者条件执行编辑命令。
sed命令常用于一整行的处理,而awk比较倾向于将一行分成多个“字段”然后再进行处理。awk信息的读入也是逐行读取的,执行结果可以通过print的功能将字段数据打印显示。在使用awk命令的过程中,可以使用逻辑操作符“&&”表示“与”、“||”表示“或”、“!”表示“非”;还可以进行简单的数学运算,如+、-、*、/、%、^分别表示加、减、乘、除、取余和乘方。
2.命令格式
awk 选项 ‘模式或条件 {操作} 文件 1 文件 2 …
awk -f 脚本文件 文件 1 文件 2 …
3.awk常见的内建变量(可直接用)
FS:列分割符。指定每行文本的字段分隔符,默认为空格或制表位。与"-F"作用相同
NF:当前处理的行的字段个数。
NR:当前处理的行的行号(序数)。
$0:当前处理的行的整行内容。
$n:当前处理行的第n个字段(第n列)。
FILENAME:被处理的文件名。
RS:行分隔符。awk从文件上读取资料时,将根据RS的定义把资料切割成许多条记录,而awk 一次仅读入一条记录,以进行处理。预设值是’\n’
4.按行输出文本
5.按字段输出文本
6.通过管道,双引号调用shall命令
通过管道、双引号调用 Shell 命令:
date -d "$(awk -F "." '{print $1}' /proc/uptime) second ago" +"%F %H:%M:%S" #显示上次系统重启时间,等同于uptime;second ago为显示多少秒前的时间,+"%F %H:%M:%S"等同于+"%Y-%m-%d %H:%M:%S"的时间格式
awk 'BEGIN {while ("w" | getline) n++ ; {print n-2}"%"}'#调用w命令,并用来统计在线用户数
awk 'BEGIN {"hostname" | getline ; {print $0}}' #调用 hostname,并输出当前的主机名
当getline左右无重定向符“<”或“|”时,getline作用于当前文件,读入当前文件的第一行给其后跟的变量var或$0;应该注意到,由于awk在处理getline之前已经读入了一行,所以getline得到的返回结果是隔行的。
当getline左右有重定向符“<”或“|”时,getline则作用于定向输入文件,由于该文件是刚打开,并没有被awk读入一行,只是getline读入,那么getline返回的是该文件的第一行,而不是隔行。
https://blog.51cto.com/u_15380738/4848333
页:
[1]