首页 > 系统相关 >shell脚本里的sed和awk

shell脚本里的sed和awk

时间:2022-11-01 18:37:36浏览次数:34  
标签:文件 shell 处理 命令 sed awk root

一、sed

1.1、sed的原理

sed是一种流编辑器,流编辑器会在编辑器处理数据之前基于预先提供一组规则来编辑数据流。

sed编辑器可以根据命令来处理数据流中的数据,这些命令要么从命令行中输入,要么存储在一个命令文本中。

1.2、sed的流程

sed 的工作流程主要包括读取、执行和显示三个过程:

读取: sed从输入流(文件、管道、标准输入)中读取一行内容并存储到临时的缓冲区中(又称模式空间,pattern space )。
执行:默认情况下,所有的sed 命令都在模式空间中顺序地执行, 除非指定了行的地址,否则sed命令将会在所有的行上依次执行。
显示:发送修改后的内容到输出流(屏幕)。在发送数据后,模式空间将会被清空。在所有的文件内容都被处理完成之前,上.述过程将重复执行,直至所有内容被处理完。
在所有的文件内容都被处理完成之前,上述过程将重复执行,直至所有内容被处理完。

注意:默认情况下所有的sed命令都是在模式空间内执行的,因此输入的文件并不会发生任何变化,除非是用重定向存储输出或者sed -i.

1.3、sed命令格式

 1  
 2 sed -e  '操作' 文件1 文件2..
 3  
 4 sed -n -e '操作1;操作2' 文件1 文件2 ..
 5  
 6 sed -f  脚本文件  文件1  文件2 ...
 7  
 8 sed -i -e  '操作' 文件1 文件2 ...
 9 sed  -e  'n {
10   操作1
11   操作2
12 }'  文件1  文件2 ...

常用选项

选项 作用
-e或--expression= 表示用指定命令来处理输入的文本文件,只有一个操作命令时可省略,一般在执行多个操作命令使用
-f或--file= 表示用指定的脚本文件来处理输入的文本文件
-h或--help 显示帮助
-n、--quiet或silent 禁止sed编辑器输出,但可以与p命令一起使用完成输出
-i 直接修改目标文本文件 (建议先验证命令或备份目标文件)
-r sed 的动作支持的是延伸型正规表示法的语法。(默认是基础正规表示法语法)

 

常用操作

操作 作用
s 替换,替换指定字符
d 删除,删除选定的行
a 增加,在当前行下面增加一行指定内容
i
插入,在选定行上面插入一行指定内容
c 替换,将选定行替换为指定内容
y 字符转换,转换前后的字符长度必须相同
p 打印,如果同时指定行,表示打印指定行;如果不指定行,则表示打印所有内容;如果有非打印字符,则以ASCII码输出。其通常与"-n"选项一起使用。
= 打印行号
l(小写L) 打印数据流中的文本和不可打印的ASCII字符(比如结束符$、制表符\t)

 

二、awk命令的定义

2.1、awk的命令原理

逐行读取文本,默认以空格或tab键为分割符进行分割,将分隔所得的各个字段保存到内建变量中,并按模式或者条件执行编辑命令。

sed命令常用于一整行的整理,而awk命令比较倾向于将一行分成多个“字段”然后再进行处理。

awk信息的读取也是整行读取的,执行结果可以通过print的功能将字段数据打印显示。在使用awk命令的工程中,可以使用逻辑操作符,"&&" 表示"与"、"||"表示"或"、"!"表示"非",还可以进行简单的数学运算。

2.2、awk的命令格式

awk 选项  '模式或条件 {操作}' 文件1 或 文件 2

awk -f  脚本文件    文件1  文件 2

2.3、awk的内建变量

(1)FS

列分隔符。指定每行文本字段的分隔符,默认为空格和制表位。与"-F"作用相同。

(2)NF

当前处理行的字段个数

(3)NR

当前处理行的行号

(4)$0

当前处理行的整行内容

(5)$n

当前处理行的第n个字段

(6)FILENAME

被处理的文件名

(7)RS

行分隔符。awk从文件上读取资料时,将根据RS的定义把资料切割成许多条记录,而awk一次仅读入一条记录,以进行处理。预设值是’\n'

三、awk命令的运用

3.1、打印磁盘使用情况

 1 [root@localhost ~]# df |awk '{print $5}'
 2 已用%
 3 9%
 4 0%
 5 0%
 6 2%
 7 0%
 8 4%
 9 1%
10 1%
11 100%
12 0%

 

 

3.2、提取ip地址和mac地址

ip地址

1 [root@localhost ~]# ifconfig | sed -n '2p' |awk '{print $2}'
2 192.168.139.100

 

 mac地址

1 [root@localhost ~]# ifconfig | sed -n '3p' |awk '{print $2}'
2 fe80::2117:15fb:ca99:7599

 

 

3.3、根据列分隔符提取

FS∶ 列分割符提取列

使用分隔符过滤出root用户和它使用的shell

[root@localhost ~]# cat /etc/passwd|awk -F ":" '/^root/ {print $1,$NF}'
root /bin/bash

NR

当前处理的行的行号

查看用户zs的行号

1 [root@localhost ~]# awk  -F":" '/^zs/ {print $1,NR}' /etc/passwd
2 zs 41

 

标签:文件,shell,处理,命令,sed,awk,root
From: https://www.cnblogs.com/zhao222/p/16848689.html

相关文章

  • Shell脚本
    导图1.程序编程风格面向过程语言做一件事情,排出个步骤,第一步干什么,第二步干什么,如果出现情况A,做什么处理,如果出现了情况B,做什么处理问题规模小,可以步骤化,按部就班......
  • sed基本用法与正则表达式
    sed工作原理sed即StreamEditor,和vi不同,sed是行编辑器。Sed是从文件或管道中读取一行,处理一行,输出一行;再读取一行,再处理一行,再输出一行,直到最后一行。每当处理一行时,把......
  • shell中的文本处理命令和正则表达式
    一、文本处理命令1.1、sort命令 使用格式:sort [选项] 参数常见选项:选项作用-f忽略大小写,将小写字母转换成大写字母来比较-b忽略每行前面的空格-n......
  • 第十三单元:AWK实战应用
    awk内建变量       NF:字段数量      NR:文件行数      FNR:各文件分别统计行数条件表达式:     selector?if-true-expressio......
  • 使用shell进行简单分析增量更新时间的方法
    使用shell进行简单分析增量更新时间的方法思路产品里面更新增量时耗时较久,想着能够简单分析下哪些补丁更新时间久哪些相同前缀的补丁更新的时间累积较久.本来想通......
  • shell免交互与交互
    一,HereDocument免交互1.概述使用I/O重定向的方式将命令列表提供给交互式程序或命令,如cat,read或ftp命令;是标准输入的一种替代品,可以帮助脚本开发人员不必使用临时文件来......
  • PowerShell 获取虎扑步行街热榜json数据
    代码(curl"https://bbs.hupu.com/all-gambia").ParsedHtml.getElementsByClassName('t-info')|%{$texts=$_.getElementsByTagName('span')@{url=......
  • crontab执行shell脚本
     #!/bin/bashsource/etc/profile#需要导入环境变量,否则非原生命令执行不成功Sendmail(){smtp='mail.yx.com'account='[email protected]'password='123'to='[email protected]'subject=$......
  • shell数组
    一,数组方法一数组名=(value0value1value2…)array1=(1020304050)方法二数组名=([0]=value[1]=value[2]=value…)array2=([0]=10[1]=20[2]=30[3]=40[......
  • Jsch远程执行shell脚本命令
    分享知识传递快乐JSch是JavaSecureChannel的缩写。JSch是一个SSH2的纯Java实现。它允许你连接到一个SSH服务器,并且可以使用端口转发,X11转发,文件传输等,当然你也可以集成......