@[toc]
1.sed编辑器 1.什么是sed编辑器? sed是一种流编辑器,流编辑器会在编辑器处理数据之前基于预先提供的—组规则来编辑数据流 2.sed编辑器作用 sed编辑器可以根据命令来处理数据流中的数据,这些命令要么从命令行中输入,要么存储在一个命令文本文件中 3.sed的工作流程
DSC0000.png
2021-12-27 17:03 上传
4.命令格式
DSC0001.png
2021-12-27 17:03 上传
DSC0002.png
2021-12-27 17:03 上传
常用选项
- -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.打印内容
DSC0003.png
2021-12-27 17:03 上传
6.用文本模式来过滤出行
DSC0004.png
2021-12-27 17:03 上传
7.删除行
DSC0005.png
2021-12-27 17:03 上传
8.替换 行范围 s/旧字符串/新字符串/替换标记 4种替换标记: · 数字: 表明新字符串将替换第几处匹配的地方 · g: 表明新字符串将会替换所有匹配的地方 · P: 打印与替换命令匹配的行,与-n一起使用 · w文件: 将替换的结果写到文件中
DSC0006.png
2021-12-27 17:03 上传
DSC0007.png
2021-12-27 17:03 上传
DSC0008.png
2021-12-27 17:03 上传
DSC0009.png
2021-12-27 17:03 上传
DSC00010.png
2021-12-27 17:03 上传
DSC00011.png
2021-12-27 17:03 上传
DSC00012.png
2021-12-27 17:03 上传
DSC00013.png
2021-12-27 17:03 上传
DSC00014.png
2021-12-27 17:03 上传
DSC00015.png
2021-12-27 17:03 上传
DSC00016.png
2021-12-27 17:03 上传
DSC00017.png
2021-12-27 17:03 上传
DSC00018.png
2021-12-27 17:03 上传
DSC00019.png
2021-12-27 17:03 上传
DSC00020.png
2021-12-27 17:03 上传
DSC00021.png
2021-12-27 17:03 上传
DSC00022.png
2021-12-27 17:03 上传
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.按行输出文本
DSC00023.png
2021-12-27 17:03 上传
5.按字段输出文本
DSC00024.png
2021-12-27 17:03 上传
6.通过管道,双引号调用shall命令
DSC00025.png
2021-12-27 17:03 上传
DSC00026.png
2021-12-27 17:03 上传
DSC00027.png
2021-12-27 17:03 上传
DSC00028.png
2021-12-27 17:03 上传
DSC00029.png
2021-12-27 17:03 上传
DSC00030.png
2021-12-27 17:03 上传
DSC00031.png
2021-12-27 17:03 上传
DSC00032.png
2021-12-27 17:03 上传
通过管道、双引号调用 Shell 命令:
DSC00033.png
2021-12-27 17:03 上传
DSC00034.png
2021-12-27 17:03 上传
DSC00035.png
2021-12-27 17:03 上传
DSC00036.png
2021-12-27 17:03 上传
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"的时间格式
DSC00037.png
2021-12-27 17:03 上传
awk 'BEGIN {while ("w" | getline) n++ ; {print n-2}"%"}' #调用w命令,并用来统计在线用户数
DSC00038.png
2021-12-27 17:03 上传
awk 'BEGIN {"hostname" | getline ; {print $0}}' #调用 hostname,并输出当前的主机名
DSC00039.png
2021-12-27 17:03 上传
当getline左右无重定向符“<”或“|”时,getline作用于当前文件,读入当前文件的第一行给其后跟的变量var或$0;应该注意到,由于awk在处理getline之前已经读入了一行,所以getline得到的返回结果是隔行的。 当getline左右有重定向符“<”或“|”时,getline则作用于定向输入文件,由于该文件是刚打开,并没有被awk读入一行,只是getline读入,那么getline返回的是该文件的第一行,而不是隔行。
DSC00040.png
2021-12-27 17:03 上传
|