IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> linux 流编辑器sed -> 正文阅读

[系统运维]linux 流编辑器sed

sed简介

  • sed工作流程
    1、sed是一种在线、非交互式的编辑器,他一次处理一行内容,处理时,吧当前处理的行存储在临时缓冲区中:缓冲区叫模式空间 pattern space
    2、然后sed命令处理缓冲区中的内容,处理完成后,在推动到屏幕。如此一行处理完成后再处理下一行,直到文件末尾。
    3、文件内容并没有改变,除非使用重定向存储回去
  • 命令格式

sed [options] ‘command’ file(s)
sed [options] -f scriptfile file(s)
注意:只有当语法错误时,返回状态为非0

  • 支持正则表达式
    1、基本元字符集:^ $ . * [] [^] \< \> \( \) \{ \}
    2、扩展元字符: ? + { } | ( )
    1、使用扩展元字符方式:sed -r
  • 简单使用了解sed
sed -r 'p' /etc/passwd				# p表示打印,读取一行打印一行
sed -r -n '' /etc/passwd			# n表示静默的方式,单纯的执行p,所以n p 一般一起使用
sed -r -n '/root/p' /etc/passwd		#打印有root的行
sed -r -n '/root/=' /etc/passwd		#打印有root的行号
  • 查找替换
sed -r 's/root/admin/' /etc/passwd			# s表示产找所有行,读取一行内容到模式空间中,然后替换
sed -r 's/root/admin/g' /etc/passwd			# g表示全局,一行中可以多次匹配
sed -r 's/root/admin/gi' /etc/passwd		# i表示忽略大小写

sed -r '/root/d' /etc/passwd				# d表示模式空间中删除匹配到的行,未匹配到的行输出
  • 按行号操作
sed -r '1,3d' passwd					#删除1~3行
sed -r '/^root/,5d' /etc/passwd			#匹配以root开始,删除到第5行
sed -r '/^root/,+5d' /etc/passwd		#从root开始的,连删5行
										# 这里可以sed -rn '/^root/,5p' /etc/passwd	用于打印,对于日志查找比较实用
sed -r '/root/!d' /etc/passwd			#除了root匹配到的行,都删除
sed -r '1~2d' /etc/passwd				#从1行开始,间隔两行删除,即删除奇数行

sed命令/选项

  • 命令
命令功能案例
a 在当前行后添加一行或多行sed -r ‘2a111’ passwd; sed -r ‘s/root/a111’ passwd
c 用新的文本修改(替换)当前行中的文本sed -r ‘2c111’ passwd; sed -r ‘s/root/c111’ passwd
d 删除行
i 在当前行之前插入文本sed -r ‘2i111’ passwd; sed -r ‘s/root/c111’
l列出非打印字符
p打印行
n从当前行的下一行处理sed -r ‘/root/{n;d}’ /etc/passwd
对选中行以外的所有行应用命令sed -r ‘s/root/!c111’
s 查询标志
g 在行内全局替换sed -r ‘s/root/admin/g’ /etc/passwd
i 忽略大小写sed -r ‘s/root/admin/gi’ /etc/passwd
r 从文件中读取sed -r ‘/root/r /etc/mydata’ /etc/passwd ;将mydata读取到匹配到root的行,行后追加
w 将行写入文件sed -r ‘/root/w /etc/mydata’ /etc/passwd; 源文件mydata内容被覆盖
h 把模式空间里的内容复制到暂存缓冲区(覆盖)
H 把模式空间里的内容复制到暂存缓冲区(追加)
g 取出暂存换从去的内容,将器复制到模式空间(覆盖)
G 取出暂存换从去的内容,将器复制到模式空间(追加)
x 交换暂存缓冲区与模式空间的内容
  • 选项
选项功能
-e 允许多项编辑
-f指定sed脚本文件名
-n 取消默认的输出,静默输出
-i inplace 修改源文件内容
-r 支持扩展元字符

模式空间、暂存空间使用案例

#默认情况下,暂存空间里面时一个换行符(空行)
sed -r 'g' /etc/passwd						#处理第一行时,从暂存空间拿来一个换行符覆盖,第二行以此类推
sed -r 'G' /etc/passwd						#处理第一行时,从暂存空间拿来一个换行符追加,追加一个空行,第二行以此类推

sed -r '1{h;d};$G' /etc/passwd				#将第1行内容覆盖到暂存空间,然后在最后一行追加回来
  • 高级应用1:倒排

1.txt
1
2
3
4
5
6
要求倒序输出

tac 1.txt
# 可倒序
--------------------------------------
sed -r '1!G;h;$!d' 1.txt
# 1!G 第一行不从暂存空间中追加到模式空间,其他行都追加
# h 把模式空间中的内容覆盖到暂存空间
# $!d $表示最后一行,意思为最后一行不删除,即 1~($-1)行都删除不输出,只输出最后一行,此处行代表sed读取到的行,不与空间中的行相同意义
  • 高级应用2:列转行

1.txt
1
2
3
4
5
6
要求输出 1 2 3 4 5 6

sed -ne 'H;${x;s/\n/ /g;p}' 1.txt
# H所有行都追加到暂存模式
# $ 表示最后一行 {} 多个命令
# x或者g 交换或者覆盖模式空间内容
# 换行符替换成空格
# p 打印
  • 高级应用3:累加

1.txt
1
2
3
4
5
6
要求输出 21

sed -rne 'H;${g;s/\n/\+/g;s/^\+//;p}' 1.txt
sed -ne 'H;${g;s/\n/+/g;s/^+//;p}' 1.txt|bc
# 使用bc计算器 

sed编辑文件案例(*)

  • 删除文件中的注释行/空行
# 1、删除以#开始的注释行
sed -ri '/^#/d' 1.txt

# 2、删除注释行前面带空格 tab的注释行
sed -ri '/^[ \t]*#/d' 1.txt

# 3、删除空行
sed -ri '/^[ \t]*$/d' 1.txt

# 4、删除空行以及注释行
sed -ri '/^(([ \t]*$)|([ \t]*#))/d' 1.txt
sed -ri '/^[ \t]*#/d;/^[ \t]*$/d' 1.txt

# 5、追加内容
sed -ri '$alocal=127.0.0.1' 1.txt

# 6、给文件添加注释
sed -ri '2,3s/^/#/' 1.txt
sed -ri '2,3s/(.*)/#\1/' 1.txt
sed -ri '2,3s/.*/#&/' 1.txt  # & 表示前面匹配
sed -ri '2,3s/^[ \t]*#*/#/' 1.txt

  • 使用外部变量
redisIpConfig="ip=127.0.0.1"
sed -ri '$a'"$redisIpConfig" 1.txt  # 注意,${}这种变量引用方式不可用

sed -ri 's/^ip=([0-9.]*)*/'"$redisIpConfig"'/g' 1.txt

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-03-24 00:59:27  更:2022-03-24 01:00:37 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 0:04:20-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码