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 ...
随机推荐
- Session 和 Cookie的区别
2019-03-26 18:16:47 一.区别概论 Session是在服务端保存的一个数据结构,用来跟踪用户的状态,这个数据可以保存在集群.数据库.文件中:Cookie是客户端保存用户信息的一种机制 ...
- haoop fs 命令
Hadoop fs 命令详解 参考文档:https://hadoop.apache.org/docs/r2.7.1/hadoop-project-dist/hadoop-common/FileSy ...
- 让JSON.js完全适应.NET
动机:.net 默认的时间序列化方式为\/Date(数字 时区)\/,序列化成JSON在前端很难处理,有没有一种好的处理方式呢? 改进: JSON = new function(){ this.dec ...
- android -------- 获取手机设备信息
最近在开发中,需要用到一些系统信息,总结了一下 /** * Created by zhangqie on 2019/2/26 * Describe: 系统工具类 */ public class Equ ...
- 『高性能模型』深度可分离卷积和MobileNet_v1
论文原址:MobileNets v1 TensorFlow实现:mobilenet_v1.py TensorFlow预训练模型:mobilenet_v1.md 一.深度可分离卷积 标准的卷积过程可以看 ...
- pandas数据结构之Dataframe
Dataframe DataFrame是一个[表格型]的数据结构,可以看做是[由Series组成的字典](多个series共用同一个索引).DataFrame由按一定顺序排列的多列数据组成.设计初衷是 ...
- icpc2018-焦作-E Resistors in Parallel-数论+大数
http://codeforces.com/gym/102028/problem/E 定义n种电阻,阻值r[i]={ inf | i%d2==0 && d>1 , i | e ...
- mstOne
云鸟(2017年6月6日) 1.html标签语义化的好处 a:利于seo优化 b:在样式丢失的时候,还是可以比较好的呈现结构 c:更好的支持各种终端,例如无障碍阅读和有声小说等. d:利于团队开发和维 ...
- 20175227张雪莹 2018-2019-2 《Java程序设计》第六周学习总结
20175227张雪莹 2018-2019-2 <Java程序设计>第六周学习总结 教材学习内容总结 第七章 内部类与异常类 内部类:在一个类中定义另一个类:包含内部类的类为外嵌类 内部类 ...
- java变量的作用域和基本数据类型转换
1.变量的作用域 赋值运算符 变量名 = 表达式 列: a = (b+3)+(b-1) 表达式就是符号(如:加号,减号)与操作数(如:b,3)的组合 自动类型转换(隐式类型转换):从小类型到大类型可以 ...