Linux sed工具的使用及工作原理

目录
  • 基础知识
  • sed编辑器: Stream Editor
    • 工作原理:
  • sed的基本用法
    • sed的命令格式
      • sed实现自动打印功能(最基本用法)
      • sed选项
    • sed的脚本格式
      • sed脚本的地址格式
      • sed脚本的指令
      • 范例
    • sed工具的核心用法:搜索替代
      • 搜索替代的修饰符:
      • 正则表达式的分组(后项引用)
      • 范例
  • sed编辑器的高级用法
    • 相关概念
    • 和两个空间相关的指令
      • sed命令使用变量
      • 范例

基础知识

- 行编辑工具: 一行一行处理文件内容,例如:sed

- 全屏编辑工具:一次性将文件所有内容加载到内存中,例如:vi、vim、nano

sed编辑器: Stream Editor

工作原理:

逐行处理文件内容,一次读取一行内容到模式空间处理。由此反复,知道最后一行处理完成。

# 处理:可以是输出到屏幕,也可以是文本的修改替换等操作
# 模式空间:就是一块内存空间

sed的基本用法

sed的命令格式

sed [option] 'script' [inputfile]

#script: sed自身的脚本,sed自身语法的一种脚本
#inputfile: 文件,如果不写文件就对标准输入的内容进行处理

sed实现自动打印功能(最基本用法)

sed '' filename

#''里面的脚本内容不能省略
#不输入脚本就是读入什么就默认打印什么 --- sed内置了自动打印的功能

sed选项

-n:关闭sed的自动打印

-e:多点编辑(一次更改多个内容)

-r,-E:使用正则表达式

-i.bak 先把文件做个备份然后再改

-s:将多个文件视为单独的文件

sed的脚本格式

sed脚本:由位置(地址)和指令组合而成

sed脚本的地址格式

  • 空地址
  • 单地址
  • 地址范围
  • 步进
空地址:

表示对全文进行处理

单地址:

表示处理指定的行。

#指定的行可以通过数字直接指定,也支持正则表达式匹配。
#写正则表达式的格式:/pattern/
地址范围:

(n,m):表示从n行开始,到m行结束这个范围的内容。

#地址范围也可以使用正则表达式表示: /pat1/,/pat2/ (第一个正则表达式之后到下一个正则表达式中间的内容)

sed脚本的指令

 p --- 内容打印

 Ip --- 忽略大小写输出

 d --- 把模式空间内容删除掉,不再自动打印了

 a --- 再某些行后面加内容

 i --- 再某些行前面加内容

 c --- 替换某一行的内容

 w --- file 另存为指定文件

 r --- 把一个文件内容读到当前匹配到的行中

 = --- 某一行前面添加行号

 ! --- 除了某一行的意思

 q --- 结束或退出sed

#搜索替代
s/pattern/string/修饰符 --- 查找替换,支持使用其它分隔符

范例

#sed基本用法:自动打印
#查看某个文件的文本内容
sed '' dir.sh

#打印指定行的内容
sed -n '3p' /etc/passwd #需要使用-n关闭自动打印,因为如果使用了自动打印会输出所有内容,-p:打印匹配到的内容

#打印出包含root的行
sed -n '/root/p' /etc/passwd

#打印从第三行到第六行的内容:
sed -n '3,6p' /etc/passwd

#打印以r开头到以g开头的行的中间那些行
sed -n '/^r/,/^g/p' /etc/passwd #找到了第一个满足条件的范围后不会停止,还会继续往下面找。

#打印奇数行
sed -n '1~2p' /etc/passwd #从1开始,每次步进2

sed工具的核心用法:搜索替代

#搜索替代的格式:
s/pattern/string/修饰符  #支持使用其它分隔符,可以是其它形式:s@@@,s###
s/模式/替代的字符串/修饰符

搜索替代的修饰符:

g --- 行内全局替换
p --- 显示替换成功的行
w --- /PATH/FILE 将替换成功的行保存至文件中
I,i --- 忽略大小写

# &符号:待变前面搜索出来的内容。 相当于一个变量,保存搜索出来的内容

正则表达式的分组(后项引用)

小括号实现分组,后面要表示第几个分组的内容就用 \num(第几个小括号里面的内容)  #分组实现把一个文件的一行切成多块,保留其中之一

范例

#sed分组的实现 --- 分组使用的是小括号(直接小括号是扩展正则表达式,不加r参数用的是基本正则表达式)
echo abc123xyz | sed -r 's/(abc)(123)(xyz)/\1/' #输出abc 值留下了第一个分组
#搜索替换和& --给前面特定的内容后面加内容
sed -nr 's/r..t/&er/gp' /etc/passwd #给搜索到的内容加上er结尾
#获取分区利用率

#获取指定网卡的ip地址:
ifconfig ens33 | sed -nr '2s/.*inet ([0-9.]+) .*/\1/p'
#行首一直到inet 中间空格
#一个以上的数字或点 空格 一直到结尾

ifconfig ens33 | sed -rn '2s/(.*inet )([0-9].*)(netmask.*)/\2/p'
#行首一直到inet,中间空格
#数字
#取基名和目录名
echo "/etc/netplan/01-netcfg" | sed -nr 's#.*\/([^/]+)#\1#p'  #结果为 01-netcfg
#从任意字符开始到以斜杠结尾,然后以非斜杠开头的内容
#使用sed将selinux改为disabled
sed -r -i.bak '/^SELINUX=/s/(SELINUX=).*/\1disabled/' /etc/selinux/config
# 取文件的前缀和后缀
echo a.b.c.tar | sed -nr 's/(.*)\.([^.]+)$/\2/p'
#将非#开头的行加#
sed -rn 's/^[^#]/#&/p' /etc/fstab
或
#sed -rn 's/^[^#](.*)/#\1/p' /etc/fstab

#将#开头的行删除#
#sed -ri.bak '/^#/s/^#//' /etc/fstab

#删除指定的行
cat /etc/passwd | sed '/tom/d' #删除含有root的行
cat /etc/passwd | sed '4-10d' #删除第四行到第十行的内容

sed编辑器的高级用法

相关概念

模式空间:pattern space,存放sed需要处理哪一行数据(一个缓冲区)

保持空间:Hold Space,临时存放模式空间中的数据(一个临时空间)

和两个空间相关的指令

#模式空间内容-->保持空间 小写覆盖,大写追加
h 模式空间的内容覆盖到保持空间
H 模式空间的内容追加到保持空间(内容追加)

#保持空间内容--->模式空间
g 保持空间数据覆盖模式空间
G 保持空间内容追加模式空间

#内容互换
x 两者内容互换

#匹配到的下一行内容--->模式空间
n 匹配行的下一行覆盖至模式空间
N 匹配行的下一行追加至模式空间

#删除
d 清空模式空间
D 删除模式空间第一行

sed命令使用变量

#因为sed的脚本使用单引号括起来的,单引号属于强引用。所见即所得。
#例如:打印含有root的行
name=root
cat /etc/passwd | sed -nr "/$name/p" #如果里面的内容本来就带双引号的,所以就不能再在外面使用双引号。
解决方法;cat /etc/passwd | sed -nr '/'$name'/p' #再加一个单引号把变量括起来 把'/'和'/p'成对了,变量空出来了
#多点编辑并调用变量
#使用变量的方式修改httpd的配置文件 servername和port
cat /etc/httpd/conf/httpd.conf | sed -nr -e  's/^(Listen) 80/\1 '$port'/p' -re "/#ServerName /c ServerName= `hostname`:$port/p"
#或者:
cat /etc/httpd/conf/httpd.conf | sed -nr -e  's/^(Listen) 80/\1 '$port'/p' -re '/#ServerName /c ServerName= '$(hostname)':'$port'/p' # $(command)
#把包含ServerName的这一行替换成: ServerName: 主机名:端口

范例

#sed实现修改默认的网卡名
 cat /etc/default/grub | sed -nr 's/^(GRUB_CMDLINE_LINUX=.*)"$/\1  net.ifnames=0"/p'
#打印偶数行
seq 10 | sed -n 'n;p' #n:读取到的行的下一行
#比如首先读取到的是第一行,因为有n,所以就以读到的内容的下一行内容覆盖当前读到的内容到模式空间,所以第一次输出2.

seq 10 | sed -n '2~2p' #使用步进的方式实现

seq 10 | sed -n '1~2!p' #!表示除了这些行,其他的都打印

到此这篇关于Linux sed工具的使用的文章就介绍到这了,更多相关Linux sed工具内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • linux中sed命令的使用与注意小结

    前言 sed是一种流编辑器,它是文本处理中非常有用的工具,能够完美的配合正则表达式使用,功能不同凡响.处理时,把当前处理的行存储在临时缓冲区中,称为『模式空间』(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕.接着处理下一行,这样不断重复,直到文件末尾.文件内容并没有改变,除非你使用重定向存储输出.sed主要用来自动编辑一个或多个文件,简化对文件的反复操作,编写转换程序等. sed的用法 $ sed [-nefr] [动作] 参数: -n :

  • 浅谈linux中sed命令和awk命令的使用

    本文主要研究的是linux中sed命令和awk命令的使用的相关内容,具体如下. 1.sed命令:没有重定向不会真正修改源文件中的内容 查询语句 ①sed -n '/sbin/p' passwd 表示查询出passwd文件中存在sbin字符的所有行并打印出来,其中两个/表示的是其中的是正则表达式,-n和/p是该命令的参数,需要联合使用 ②sed -n 'xp' passwd x是数字,表示打印出passwd文件中第x行的数据 新增语句 ①sed '1a 这是第一行后面添加的内容' passwd 其

  • Linux sed命令的使用

    1.功能简介 sed(Stream EDitor)是一种流文件编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为"模式空间"(Pattern Space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕,接着处理下一行,直到文件末尾.文件内容并没有改变,除非使用-i选项.sed主要用来编辑一个或多个文件,简化对文件的反复操作或者用来编写转换程序等. sed功能同awk类似,差别在于,sed简单,对列处理的功能要差一些,awk功能复杂,对列

  • Linux使用sed命令替换字符串教程

    要替换字符串,我们需要使用以下格式. $ sed s/替换的目标字符串/替换后的字符串/ 文件名 在下面我们替换写为"appleorangemelon"的字符串"sample.txt". $ sed s/orange/ORANGE/ sample.txt 执行结果为 appleORANGEmelon 替换并输出字符串. 另外,如下所示,在cat命令后用"|"连接sed命令也能得到同样的结果. $ cat sample.txt | sed s/ap

  • Linux sed工具的使用及工作原理

    目录 基础知识 sed编辑器: Stream Editor 工作原理: sed的基本用法 sed的命令格式 sed实现自动打印功能(最基本用法) sed选项 sed的脚本格式 sed脚本的地址格式 sed脚本的指令 范例 sed工具的核心用法:搜索替代 搜索替代的修饰符: 正则表达式的分组(后项引用) 范例 sed编辑器的高级用法 相关概念 和两个空间相关的指令 sed命令使用变量 范例 基础知识 - 行编辑工具: 一行一行处理文件内容,例如:sed - 全屏编辑工具:一次性将文件所有内容加载到

  • DDNS 的工作原理及其在 Linux 上的实现

    DDNS 工作原理的分析 DDNS 的实现最根本的一点是当主机的 IP 地址发生变化的时候,实现 DNS 映射信息的及时更新,应用程序需要及时地获得这一信息,主要的方法可分为两大类: 一类是轮询机制,即:应用程序每隔一定的时间,去从查询主机当前的 IP 地址,并与之前的进行比较,从而判断网络地址是否发生了变化.显然,这种方法不仅效率低下,而且对每次查询 IP 地址的时间间隔很难得到一个折中的数值. 第二类方法是异步实现方式,即:每当主机的 IP 地址发生变化的时候,应用程序能够被及时地通知到.这

  • Linux NFS机制工作原理及实例解析

    什么是NFS? network file system 网络文件系统 通过网络存储和组织文件的一种方法或机制. 为什么要用NFS? 前端所有的应用服务器接收到用户上传的图片.文件.视频,都会统一放到后端的存储上. 共享存储的好处:方便数据的查找与取出,缺点:存储服务器压力大,坏了丢失全部数据. NFS工作原理 NFS功能,有很多服务,每个服务都有自己的端口,并且经常变换. 客户端查找这些端口,就需要一个中间人---RPC服务(默认端口号111). 工作流程: 1.启动RPC服务 2.启动NFS服

  • shell中的流编辑器awk工作原理

    awk命令 awk是一种处理文本文件的语言,是一个强大的文本分析工具, 用于在linux/unix下对文本和数据进行处理 . 而且它支持用户自定义函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具 awk工作原理 逐行读取文本,默认以空格或tab键为分隔符进行分隔,将分隔所得的各个字段保存到内建变量中,并按模式或者条件执行编辑命令. sed命令常用于一整行的处理,而awk比较倾向于将一行分成多个"字段"然后再进行处理. awk信息的读入也是逐行读取的,执行结果可

  • Python 虚拟环境工作原理解析

    目录 简介 使用 激活脚本 工作原理 关于 sys.prefix 总结 其它 Python 的虚拟环境用来创建一个相对独立的执行环境,尤其是一些依赖的三方包,最常见的如不同项目依赖同一个但是不同版本的三方包,而且,在虚拟环境中的安装包不会影响到系统的安装包. 不过,其具体的工作原理是怎样的,这里详细介绍. 简介 几乎每个语言都包含自己的包管理工具,这是一个非常复杂的话题,而不同语言选择的实现又略有区别,都会做一些选择和取舍.而 Python 的包管理解决方案很多,例如 pip.virtualen

  • Docker容器实战之镜像与容器的工作原理

    目录 一. bootfs和rootfs 二. 镜像结构 三. 容器层 四. 联合文件系统​ 一. bootfs和rootfs 通常而言,Linux的操作系统由两类文件系统组成:bootfs(boot file system)和rootfs(root file system),它们分别对应着系统内核与根目录文件.bootfs层主要为系统内核文件,这层的内容是无法修改的.当我们的系统在启动时会加载bootfs,当加载完成后整个内核都会存到内存中,然后系统会将bootfs卸载掉.而rootfs层则包含

  • 详解JSP 中Spring工作原理及其作用

    详解JSP 中Spring工作原理及其作用 1.springmvc请所有的请求都提交给DispatcherServlet,它会委托应用系统的其他模块负责负责对请求进行真正的处理工作. 2.DispatcherServlet查询一个或多个HandlerMapping,找到处理请求的Controller. 3.DispatcherServlet请请求提交到目标Controller 4.Controller进行业务逻辑处理后,会返回一个ModelAndView 5.Dispathcher查询一个或多个

  • 浅析ASP.NET路由模型工作原理

    ps:这是针对ASP.NET4.5版本的,好像在最新的5.0版本中加入了OWIN,彻底解耦了和Web服务器的耦合,我还没有研究过,不敢妄言4.5的模型适用5.0. action*0x1:大话ASP.NET模型 首先我们先来了解下一个请求的悲欢离合的命运,看看它的一生中所走过的蜿蜒曲折的道路.如下图所示: 在如上所示的风光旖旎的画卷中,我们可以看到一个"请求"从客户端浏览器出发,经历千山万水到达服务器,服务器的内核模块的HTTP.SYS热情款待了它,对它进行简单的修饰之后,就和它依依惜别

  • Ajax工作原理深入理解

    1.ajax技术的背景 不可否认,ajax技术的流行得益于google的大力推广,正是由于google earth.google suggest以及gmail等对ajax技术的广泛应用,催生了ajax的流行.而这也让微软感到无比的尴尬,因为早在97年,微软便已经发明了ajax中的关键技术,并且在99年IE5推出之时,它便开始支持XmlHttpRequest对象,并且微软之前已经开始在它的一些产品中应用ajax,比如说MSDN网站菜单中的一些应用.遗憾的是,不知道出于什么想法,当时微软发明了aja

  • linux sed命令详解(推荐)

    概述 sed命令是一个面向字符流的非交互式编辑器,也就是说sed不允许用户与它进行交互操作.sed是按行来处理文本内容的.在shell中,使用sed来批量修改文本内容是非常方便的. sed命令的选项 sed [选项] [动作] 选项与参数: -n :使用安静(silent)模式.在一般 sed 的用法中,所有来自 STDIN 的数据一般都会被列出到终端上.但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来. -e :直接在命令列模式上进行 sed 的动作编辑:

随机推荐