Linux sed工具的使用
基础知识
- 行编辑工具: 一行一行处理文件内容
- 全屏编辑工具:一次性将文件所有内容加载到内存中
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 工具
我们先来谈一谈 sed 好了, sed 本身也是一个管线命令,可以分析 standard input 的啦! 而且 sed 还可以将数据进行取代.删除.新增.撷取特定行等等的功能呢!很不错吧- 我们先 ...
- Linux文件格式化与相关处理及sed工具
http://blog.csdn.net/pipisorry/article/details/52564957 geditor, sed, ed, awk, Emacs 文本处理工具 [Linux S ...
- linux学习——sed工具
命令格式: sed [-nefr] [动作] 1.sed可以分析标准输入(STDIN)的数据,然后将数据处理后,再将他输出到标准输出(STDOUT),他有替换.删除.新增.选定特定行等处理功能.sed ...
- Linux/Unix工具与正则表达式的POSIX规范
http://www.infoq.com/cn/news/2011/07/regular-expressions-6-POSIX 对正则表达式有基本了解的读者,一定不会陌生『\d』.『[a-z]+』之 ...
- sed 工具简介
sed 工具简介sed 可以分析 Standard Input (STDIN) 的数据, 然后将数据经过处理后,再将他输出到 standrad out (STDOUT) 的一个工具. 至于处理呢?可以 ...
- LINUX sed grep awk之间比较整理
正则表达式基础 在最简单的情况下,一个正则表达式看上去就是一个普通的查找串.例如,正则表达式"testing"中没有包含任何元字符,,它可以匹配"testing" ...
- Linux sed 使用笔记
sed 工具使用笔记 Linux中经常需要对一些超大的文本文件进行操作,例如 GB 级别的 CSV.TXT.LOG 文件,如果使用 vi 或者 vim 编辑器操作会非常慢且卡,此时 sed 工具或许可 ...
- Linux性能工具介绍
l Linux性能工具介绍 p CPU高 p 磁盘I/O p 网络 p 内存 p 应用程序跟踪 l 操作系统与应用程序的关系比喻为“唇亡齿寒”一点不为过 l 应用程序的性能问题/功能问 ...
- Linux 常用工具小结:(5) lftp工具使用
Linux 常用工具小结:(1) lftp工具使用. 这里会按照一些比较常用的功能列出,并举一个具体的例子逐一解释功能. 通常使用ftp过程是登陆ftp,浏览ftp内容,下载ftp文件,或者上传ftp ...
随机推荐
- mybatis混淆概念
1.resultMap与resultType <mapper namespace="com.dao.FilmMapper"> <resultMap id=&quo ...
- 《Streaming Systems》第三章: Watermarks
定义 对于一个处理无界数据流的 pipeline 而言,非常需要一个衡量数据完整度的指标,用于标识什么时候属于某个窗口的数据都已到齐,窗口可以执行聚合运算并放心清理,我们暂且就给它起名叫 waterm ...
- Linux系统安装Python3环境
点击上方"开源Linux",选择"设为星标" 回复"学习"获取独家整理的学习资料! 本文基于如下Linux系统版本: 1.默认情况下,Lin ...
- Centons7最小化安装报错:ping: baidu.com: Name or service not know
在这之前,centos7最小化安装默认是不能联网的,首先必须切换到root用户,再解决网络问题 一. 切换到root用户 二. 解决网络问题 一.切换到root用户 Linux下 ...
- EF Core 配置模型
0 前言 本文的第一节,会概述配置模型的作用(对数据模型的补充描述). 第二节描述两种配置方式,即:数据注释(data annotations)和 Fluent API 方式. 第三节开始,主要是将常 ...
- IE 浏览器将停止服务,这是真的吗?
浏览器通常是指用来检索.展示以及传递 Web 资源信息的一种应用程序,它能将网页.图片.视频等等 Web 上的信息呈现给我们. 如果现在发起一个投票:"你觉得好用的浏览器是什么?" ...
- 无线:WPA
WPA全名为Wi-Fi Protected Access,有WPA和WPA2两个标准,是一种保护无线电脑网络(Wi-Fi)安全的系统,它是应研究者在前一代的系统有线等效加密(WEP)中找到的几个严重的 ...
- 219. Contains Duplicate II - LeetCode
Question 219. Contains Duplicate II Solution 题目大意:数组中两个相同元素的坐标之差小于给定的k,返回true,否则返回false 思路:用一个map记录每 ...
- 好客租房56-props深入(3props校验-约束规则)
1常见类型:Array,bool,func,number,object,string 2React:element 3必填项:isRequred 4特定结构的想:shape({}) //导入react ...
- 【js奇妙说】如何跟非计算机从业者解释,为什么浮点数计算0.1+0.2不等于0.3?
壹 ❀ 引 0.1+0.2不等于0.3,即便你不知道原理,但也应该听闻过这个问题,包括博主本人也曾在面试中被问到过此问题.很遗憾,当时只知道一句精度丢失,但是什么原因造成的精度丢失却不太清楚.而我在查 ...