sed用法说明
sed介绍
sed:stream editor
是一个行编辑器,或叫流编辑器,每次处理一行,处理完一行再处理下一行。sed并不直接处理源文件,而是读取一行后放入模式空间(patten space)里,在这个模式空间中完成编辑,并输出显示。当然sed加上 –i 参数也可以直接原处理文件。sed不仅有模式空间,还有一个叫保持空间的概念,模式空间和保持空间的内容可以相互交换,覆盖,追加等,但是用的较少,用起来也比较烧脑,属于sed的高级用法。
sed用法
sed [option]… ‘script’ inputfile … …
常用选项:
-n:不输出模式中的内容到屏幕
-e:多点编辑
-f /path/to/script_file:从指定文件中读取编辑脚本
-r:支持使用扩展正则表达式
-i:修改原文件
地址定界:
1.不给地址:对全文进行处理
2.单地址:
#:指定的行
/pattern/:被此模式所能匹配到的每一行
3.地址范围:
#,#:表示从第几行到第几行
#,+#:表示第几行开始后的多少行
/pat1/,/pat2/:表示第一次匹配到模式1,模式2的行
编辑命令:
d:删除
p:显示
a \text:在行后面追加文本;支持使用\n实现多行追加
i \text:在行前面插入文本;支持使用\n实现多行插入
c \text:替换行为单行或多行文本
w /path/to/somefile 保存模式空间匹配到的行至指定文件中
r /path/from/somefile:读取指定文件的文本流至模式空间中匹配到的行的行后
=:为模式空间中的行打印行号
!:取反
s///:替换标记,s///g行内全局替换;支持使用其它分隔符,s@@@,s###
用法举例:
[root@slave ~]# cat ifcfg-ens33
TYPE="Ethernet"
BOOTPROTO="none"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="3503f57e-dce7-425e-870f-efbc4897bfb2"
DEVICE="ens33"
ONBOOT="yes"
IPADDR="192.168.100.20"
PREFIX="24"
GATEWAY="192.168.100.2"
DNS1="114.114.114.114"
IPV6_PEERDNS="yes"
IPV6_PEERROUTES="yes"
IPV6_PRIVACY="no"
1.显示1到3行的内容
[root@slave sed]# sed -n '1,3p' ifcfg-ens33
TYPE="Ethernet"
BOOTPROTO="none"
DEFROUTE="yes"
2.删除第2行至最后一行
[root@slave ~]# sed '2,$d' ifcfg-ens33
TYPE="Ethernet"
3.把192.168.100.20替换成192.168.100.30并只显示此行
[root@slave ~]# sed -n 's/192.168.100.20/192.168.100.30/;/IPADDR/p' ifcfg-ens33
IPADDR="192.168.100.30"
4.把所有的IPV6换成ipv6
[root@slave ~]# sed -n '1,$ s/IPV6/ipv6/g;/ipv6/p' ifcfg-ens33
ipv6INIT="yes"
ipv6_AUTOCONF="yes"
ipv6_DEFROUTE="yes"
ipv6_FAILURE_FATAL="no"
ipv6_ADDR_GEN_MODE="stable-privacy"
ipv6_PEERDNS="yes"
ipv6_PEERROUTES="yes"
ipv6_PRIVACY="no"
5.在第1行之前和第3行后面加入文本“hello sed”,并显示1到4行
[root@slave ~]# sed -ne '1 i \hello sed\n===============' -e '3 a ===================\n\hello sed' -e '1,4p' ifcfg-ens33
hello sed
===============
TYPE="Ethernet"
BOOTPROTO="none"
DEFROUTE="yes"
===================
hello sed
IPV4_FAILURE_FATAL="no"
6.删除包含IPV6的行
[root@slave ~]# sed -e '/.*IPV6.*/d' ifcfg-ens33
TYPE="Ethernet"
BOOTPROTO="none"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
NAME="ens33"
UUID="3503f57e-dce7-425e-870f-efbc4897bfb2"
DEVICE="ens33"
ONBOOT="yes"
IPADDR="192.168.100.20"
PREFIX="24"
GATEWAY="192.168.100.2"
DNS1="114.114.114.114"
7.从文件sedscript读入sed脚本,要求将BOOTPROTO=”none”改成”static”,注释掉所有包含IPV6的行,在文件开始和结束行加===sed is a strong tool===,并将网关改成192.168.100.3最后将修改后的内容保存到ifcfg-test文件中
[root@slave sed]# cat sedscript
#!/bin/sed -f
# this is a sed script
1 i \=== sed is strong tool ===
s/^IPV6/# IPV6/g
s/none/static/
s/192.168.100.2/192.168.100.3/
$ a \=== sed is strong tool ===
w ifcfg-test [root@slave sed]# chmod +x sedscript
[root@slave sed]# ./sedscript ifcfg-ens33
[root@slave sed]# cat ifcfg-test
TYPE="Ethernet"
BOOTPROTO="static"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
# IPV6INIT="yes"
# IPV6_AUTOCONF="yes"
# IPV6_DEFROUTE="yes"
# IPV6_FAILURE_FATAL="no"
# IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="3503f57e-dce7-425e-870f-efbc4897bfb2"
DEVICE="ens33"
ONBOOT="yes"
IPADDR="192.168.100.30"
PREFIX="24"
GATEWAY="192.168.100.3"
DNS1="114.114.114.114"
# IPV6_PEERDNS="yes"
# IPV6_PEERROUTES="yes"
# IPV6_PRIVACY="no"
上面这个例子中的i和a插入和追加的内容没有写入到文件中,但是用重定向的方式可以。
sed用法说明的更多相关文章
- linux学习基础6之sed用法详解
1 sed 又称为流编辑器,它逐行将文本文件中的行读取到模式空间中间去,将符合编辑条件的行进行编辑后输出到显示器上来.默认sed不编辑原文件只处理模式空间中的内容. 2 sed用法 sed [opti ...
- LeetCode(193. Valid Phone Numbers)(sed用法)
193. Valid Phone Numbers Given a text file file.txt that contains list of phone numbers (one per lin ...
- 【转载】linux之sed用法
linux之sed用法 原文地址:http://www.cnblogs.com/dong008259/archive/2011/12/07/2279897.html sed是一个很好的文件处理工具 ...
- sed 用法
sed 用法 sed的其他用法如下: 1.删除行首空格 sed 's/^[ ]*//g' filename sed 's/^ *//g' filename sed 's/^[[:space:]]*// ...
- [转帖]linux之sed用法
linux之sed用法 https://www.cnblogs.com/dong008259/archive/2011/12/07/2279897.html docker images | awk ' ...
- linux之sed用法
参考 http://www.cnblogs.com/dong008259/archive/2011/12/07/2279897.html sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行 ...
- 关于sed用法
sed处理流程 sed的处理流程,简化后是这样的: 1.读入新的一行内容到缓存空间: 2.从指定的操作指令中取出第一条指令,判断是否匹配pattern: 3.如果不匹配,则忽略后续的编辑命令,回到第2 ...
- sed用法
简介 sed 是一种在线编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的 ...
- 【转】 linux之sed用法
sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换.删除.新增.选取等特定工作,下面先了解一下sed的用法sed命令行格式为: sed ...
随机推荐
- POJ-3294 Life Forms n个字符串中出现超过n/2次的最长子串(按字典序依次输出)
按照以前两个字符串找两者的最长公共子串的思路类似,可以把所有串拼接到一起,这里为了避免讨论LCP跨越多个串需需要特别处理的问题用不同的字符把所有串隔开(因为char只有128位,和可能不够用,更推荐设 ...
- Gerapy的简单使用
1. Scrapy:是一个基于Twisted的异步IO框架,有了这个框架,我们就不需要等待当前URL抓取完毕之后在进行下一个URL的抓取,抓取效率可以提高很多. 2. Scrapy-redis:虽然S ...
- 百度echarts 3.0版本和2.0版本的兼容问题
前一段时间,项目中要用到统计图表,之前也用过jqplot的图表插件,这次开发的内容中基于地图的展示还很多,所以后来选择了百度的echarts插件(echarts.baidu.com).刚开始用的时候, ...
- 『Python CoolBook:Collections』数据结构和算法_容器型value字典&顺序字典
一.collections.defaultdict:多值映射字典 defaultdict省去了初始化容器的过程,会默认value对象为指定类型的容器 指定list时可以使用.append, from ...
- python url 下载并保存
方法一:用urllib import jsonimport urllib url_model='{"version":"2","url":& ...
- JQ 查找 两个同辈元素之间 的同辈元素 nextUntil() 用于做一个多级菜单
可以应用的地方,参考了淘宝的API菜单列表 我自己的应用
- ubuntu svn服务本地搭建使用
安装 sudo apt-get install subversion 创建一个仓库 svnadmin create mysvn 编辑配置文件 /home/exayong/mysvn就是上面创建的目录 ...
- GOPATH
环境变量 GOPATH 的值可以是一个目录的路径,也可以包含多个目录路径,每个目录都代表 Go 语言的一个工作区(workspace).这些工作区用于放置 Go 语言的源码文件(source file ...
- FCC JS基础算法题(10):Falsy Bouncer(过滤数组假值)
题目描述: 删除数组中的所有假值.在JavaScript中,假值有false.null.0."".undefined 和 NaN. 使用filter方法,过滤掉生成的 Boolea ...
- getfacl语法2
一.setfacl——设定文件访问控制列表语法: setfacl [-bkndRLP] { -m|-M|-x|-X ... } file ... -m, --modify=acl 更改文件的访问控制 ...