[PHP] shell脚本中的sed与awk

  • A+
所属分类:其他教程
摘要

DSC0000.png 下载附件 2021-12-27 17:03 上传DSC0001.png 下载附件 2021-12-27 17:03 上传DSC0002.png

@[toc]

1.sed编辑器
1.什么是sed编辑器?
sed是一种流编辑器,流编辑器会在编辑器处理数据之前基于预先提供的—组规则来编辑数据流
2.sed编辑器作用
sed编辑器可以根据命令来处理数据流中的数据,这些命令要么从命令行中输入,要么存储在一个命令文本文件中
3.sed的工作流程

[PHP] shell脚本中的sed与awk

DSC0000.png

2021-12-27 17:03 上传

4.命令格式

[PHP] shell脚本中的sed与awk

DSC0001.png

2021-12-27 17:03 上传

[PHP] shell脚本中的sed与awk

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.打印内容
    [PHP] shell脚本中的sed与awk

    DSC0003.png

    2021-12-27 17:03 上传

6.用文本模式来过滤出行

[PHP] shell脚本中的sed与awk

DSC0004.png

2021-12-27 17:03 上传

7.删除行

[PHP] shell脚本中的sed与awk

DSC0005.png

2021-12-27 17:03 上传

8.替换
行范围 s/旧字符串/新字符串/替换标记
4种替换标记:

· 数字: 表明新字符串将替换第几处匹配的地方
· g: 表明新字符串将会替换所有匹配的地方
· P: 打印与替换命令匹配的行,与-n一起使用
· w文件: 将替换的结果写到文件中

[PHP] shell脚本中的sed与awk

DSC0006.png

2021-12-27 17:03 上传

[PHP] shell脚本中的sed与awk

DSC0007.png

2021-12-27 17:03 上传

[PHP] shell脚本中的sed与awk

DSC0008.png

2021-12-27 17:03 上传

[PHP] shell脚本中的sed与awk

DSC0009.png

2021-12-27 17:03 上传

[PHP] shell脚本中的sed与awk

DSC00010.png

2021-12-27 17:03 上传

[PHP] shell脚本中的sed与awk

DSC00011.png

2021-12-27 17:03 上传

[PHP] shell脚本中的sed与awk

DSC00012.png

2021-12-27 17:03 上传

[PHP] shell脚本中的sed与awk

DSC00013.png

2021-12-27 17:03 上传

[PHP] shell脚本中的sed与awk

DSC00014.png

2021-12-27 17:03 上传

[PHP] shell脚本中的sed与awk

DSC00015.png

2021-12-27 17:03 上传

[PHP] shell脚本中的sed与awk

DSC00016.png

2021-12-27 17:03 上传

[PHP] shell脚本中的sed与awk

DSC00017.png

2021-12-27 17:03 上传

[PHP] shell脚本中的sed与awk

DSC00018.png

2021-12-27 17:03 上传

[PHP] shell脚本中的sed与awk

DSC00019.png

2021-12-27 17:03 上传

[PHP] shell脚本中的sed与awk

DSC00020.png

2021-12-27 17:03 上传

[PHP] shell脚本中的sed与awk

DSC00021.png

2021-12-27 17:03 上传

[PHP] shell脚本中的sed与awk

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.按行输出文本

[PHP] shell脚本中的sed与awk

DSC00023.png

2021-12-27 17:03 上传

5.按字段输出文本

[PHP] shell脚本中的sed与awk

DSC00024.png

2021-12-27 17:03 上传

6.通过管道,双引号调用shall命令

[PHP] shell脚本中的sed与awk

DSC00025.png

2021-12-27 17:03 上传

[PHP] shell脚本中的sed与awk

DSC00026.png

2021-12-27 17:03 上传

[PHP] shell脚本中的sed与awk

DSC00027.png

2021-12-27 17:03 上传

[PHP] shell脚本中的sed与awk

DSC00028.png

2021-12-27 17:03 上传

[PHP] shell脚本中的sed与awk

DSC00029.png

2021-12-27 17:03 上传

[PHP] shell脚本中的sed与awk

DSC00030.png

2021-12-27 17:03 上传

[PHP] shell脚本中的sed与awk

DSC00031.png

2021-12-27 17:03 上传

[PHP] shell脚本中的sed与awk

DSC00032.png

2021-12-27 17:03 上传

通过管道、双引号调用 Shell 命令:
[PHP] shell脚本中的sed与awk

DSC00033.png

2021-12-27 17:03 上传

[PHP] shell脚本中的sed与awk

DSC00034.png

2021-12-27 17:03 上传

[PHP] shell脚本中的sed与awk

DSC00035.png

2021-12-27 17:03 上传

[PHP] shell脚本中的sed与awk

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"的时间格式
[PHP] shell脚本中的sed与awk

DSC00037.png

2021-12-27 17:03 上传

awk 'BEGIN {while ("w" | getline) n++ ; {print n-2}"%"}'  #调用w命令,并用来统计在线用户数
[PHP] shell脚本中的sed与awk

DSC00038.png

2021-12-27 17:03 上传

awk 'BEGIN {"hostname" | getline ; {print $0}}'           #调用 hostname,并输出当前的主机名
[PHP] shell脚本中的sed与awk

DSC00039.png

2021-12-27 17:03 上传

当getline左右无重定向符“<”或“|”时,getline作用于当前文件,读入当前文件的第一行给其后跟的变量var或$0;应该注意到,由于awk在处理getline之前已经读入了一行,所以getline得到的返回结果是隔行的。
当getline左右有重定向符“<”或“|”时,getline则作用于定向输入文件,由于该文件是刚打开,并没有被awk读入一行,只是getline读入,那么getline返回的是该文件的第一行,而不是隔行。

[PHP] shell脚本中的sed与awk

DSC00040.png

2021-12-27 17:03 上传

关注下面的标签,发现更多相似文章
  • sed
  • shell
  • 编辑器
  • 编辑
  • awk
  • 什么

  • 我的微信公众号
  • 扫一扫关注
  • weinxin
  • 我的新浪微博号
  • 扫一扫关注
  • weinxin
小辉博客

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: