我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Linux 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工具内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

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

目录基础知识sed编辑器: Stream Editor工作原理:sed的基本用法sed的命令格式sed实现自动打印功能(最基本用法)sed选项sed的脚本格式sed脚本的地址格式sed脚本的指令范例sed工具的核心用法:搜索替代搜索替代的修
2022-07-12

Linux sed工具的使用及工作原理是什么

本文小编为大家详细介绍“Linux sed工具的使用及工作原理是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“Linux sed工具的使用及工作原理是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。基础知
2023-07-02

域名查询工具的工作原理是什么

域名查询工具的工作原理是通过查询域名系统(DNS)服务器来获取域名的相关信息。当用户输入一个域名查询时,查询工具会向本地DNS服务器或根DNS服务器发送查询请求。本地DNS服务器会查找其缓存中是否有该域名的解析信息,如果没有则向根DNS服务
2023-06-12

Python编程的简易版自动化工具ADB的工作原理以及用法

本篇文章为大家展示了Python编程的简易版自动化工具ADB的工作原理以及用法,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。前言ADB,中文名安卓调试桥,它是一种功能多样的命令行工具,可用于执行各种
2023-06-15

Linux运维工具Supervisor的安装使用(进程管理工具)

一、介绍 Supervisor是用python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启。目前Supervisor可以运行在大多数Unix系统上,但不支持在Win
2022-06-04

linux管理工具怎么使用

本篇内容主要讲解“linux管理工具怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“linux管理工具怎么使用”吧!linux管理工具有:1、htop,一款监控与进程管理软件;2、dsta
2023-06-30

命令注入工具Commix的工作原理是什么

这篇文章主要为大家展示了“命令注入工具Commix的工作原理是什么”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“命令注入工具Commix的工作原理是什么”这篇文章吧。命令注入工具Commix命令
2023-06-04

win2008禁止P2P工具下载的原理及操作步骤

操作原理: 可以利用Win2008系统新增加的高级安全防火墙功能,来控制恶意下载行为,考虑到P2P工具在进行恶意下载操作时,会通过系统的3077,3078端口对外进行网络通信,我们只要让高级安全防火墙功能限制3077,307javascri
2023-06-04

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

什么是NFS network file system 网络文件系统 通过网络存储和组织文件的一种方法或机制。 为什么要用NFS 前端所有的应用服务器接收到用户上传的图片、文件、视频,都会统一放到后端的存储上。 共享存储的好处:方便数据的查找
2022-06-03

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

Linux NFS机制工作原理及实例分析,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。NFS是network file system (网络文件系统)的缩写,其主要作用就是通过
2023-06-28

linux下du和df的工作原理

本篇内容主要讲解“linux下du和df的工作原理”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“linux下du和df的工作原理”吧!1.原理介绍1 .1du的工作原理du命令会对待统计文件逐个
2023-06-05

ThreadLocal工作原理及用法是什么

今天就跟大家聊聊有关ThreadLocal工作原理及用法是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。ThreadLocal是什么ThreadLocal是线程Thread中属性
2023-06-22

Linux的一些工具使用技巧整理

1 cut 截取passwd中的第1、3两列cut -d ":" -f 1,3 /etc/passwd2 grep显示包含指定字符的行grep 29 alter.sqlgrep "root" passwd grep -n "root" pa
2023-06-05

编程热搜

目录