sed– 用于筛选和转换文本的流编辑器

sed 用于筛选和转换文本的流编辑器
命令格式:sed [OPTION] {script} file
选项

  •       -n, –quiet, –silent 抑制模式空间的自动打印 

echo -e “abc\ndef” | sed ‘p’ #输出 abc # abc # def # def echo -e “abc\ndef” | sed -n ‘p’ #输出 abc # def

  • -e script, –expression=script 添加脚本到将要被执行的命令

echo -e “abc\ndef” | sed -n -e ‘s/abc/ghi/’ -e ‘p’ # 输出 ghi # def

  • -f script-file, –file=script-file 将脚本文件的内容添加到要执行的命令–follow-symlinks 处理符号链接-i[SUFFIX], –in-place[=SUFFIX] 编辑文件(如果提供了SUFFIX ,则对原文件先进行备份) 例如

sed -i_bak ‘1d’ aaa # 将先生成aaa的备份文件aaa_bak

  • -l N, –line-length=N 为’l‘命令指定希望的行折叠长度–posix 禁用所有的GNU扩展。-r, –regexp-extended 在脚本中使用扩展的正则表达式。-s, –separate 将文件视为单个独立的文件,而不是将它们视为整个连续的字符流。-u, –unbuffered 从输入中加载尽可能少量的数据并且更频繁的刷新–help 显示帮助并且退出–version 输出版本信息并退出
    命令0地址命令: label 为b和t命令定义标签。#comment 注释一行} 块结束符号0地址或者1地址命令= 打印当前的行号a \ text 追加新行 追加文本,(模式空间内的)每一行后都将追加(新行)反斜杠后的文本。 例如

echo “abc” | sed ‘a\def’ # 输出 abc # def

  • i \ text 插入新行 插入文本, (模式空间内的)每一行前都将插入(新行)反斜杠后的文本。 例如

echo “abc” | sed ‘i\def’ # 输出 def # abc

  • q [exit-code] 立即退出sed脚本不处理任何更多的输入, 除非自动打印是未禁用的情况下当前的模式空间将被打印。退出码参数是一个GNU扩展。Q [exit-code] 立即退出sed脚本不处理任何更多的输入。退出码参数是一个GNU扩展。r filename 追加从filename读取的文本R filename 追加从filename读取的一行。每次调用命令从文件中读取一行。这是一个GNU扩展。接受地址范围的命令{ 块命令的开始,b label 跳转到标签,如果label省略,跳转到命令结尾。c \ text 行替换 用text替换选中的行,每一行都将被反斜杠后的文本替换。 例如

echo -e “abc\ndef” | sed ‘c\ghi’ # 输出 ghi # ghi

  • d 删除模式空间。启动下一个循环。当模式空间有多行时,D命令每次只删除一行,然后从下一行开始新的循环,这里的下一行是模式空间中的第二行,所以不从输入读入新行。 然后从下一行开始循环,这里的下一行就是从输入读取的新行了。 例如

echo -e “abc\ndef\nghi\njkl” | sed -n ‘N;/abc\ndef/d;p’ # 输出 ghi # jkl # sed共执行了2次循环,第一次循环如下 # N追加了一行,模式空间内容为”abc\ndef”;删除模式空间;开始下一个循环,读入输入的第一行,模式空间内容为”ghi”; # 第二次循环如下 # N追加了一行,模式空间内容为”ghi\njkl”;删除操作未执行;打印模式空间。 echo -e “abc\ndef\nghi\njkl” | sed -n ‘N;/abc\ndef/D;p;p’ # 输出 def # ghi # def # ghi # sed共执行了2次循环,第一次循环如下 # N追加了一行,模式空间内容为”abc\ndef”;删除模式空间的第一行,模式空间内容为”def”;开始下一个循环; # 第二次循环如下 # N追加了一行,模式空间内容为”def\nghi”;删除操作未执行;打印模式空间,打印模式空间。

  • h H 复制/追加 模式空间到保持空间。g G 复制/追加 保持空间到模式空间。 例如

echo -e “abc\ndef” | sed -n ‘h;n;g;p’ # 输出 abc echo -e “abc\ndef” | sed -n ‘h;n;G;p’ # 输出 def # abc echo -e “abc\ndef” | sed -n ‘h;n;H;G;p’ # 输出 def # abc # def

 

  •  n N 读取/追加 输入的下一行到模式空间。

echo -e “abc\ndef” | sed -n ‘n;p’ # 输出 def echo -e “abc\ndef” | sed -n ‘N;p’ # 输出 abc # def

  • p 打印当前的模式空间。P 打印(的内容只)到当前模式空间的第一个换行符。只打印一行的意思。 例如,

echo -e “abc\ndef” | sed -n ‘N;/abc\ndef/p’ # 输出 abc # def echo -e “abc\ndef” | sed -n ‘N;/abc\ndef/P’ # 输出 abc

  • s/regexp/replacement/ 用replacement替换匹配的内容 尝试对模式空间匹配正则表达式。如果成功,用replacement替换掉匹配的部分。replacement可能包含特殊的字符&引用已匹配的那部分。特殊的转义\1到\9引用正则表达式中对应的子表达式。 例如

echo “abc” | sed ‘s/abc/def/’ # 输出 def echo “abc” | sed ‘s/abc/&def/’ # 输出 abcdef

 

 

 

 

原创文章,作者:nene,如若转载,请注明出处:http://www.178linux.com/88052

(0)
nenenene
上一篇 2017-08-14 21:47
下一篇 2017-08-15 17:59

相关推荐

  • 22期第六周课堂作业

    1.vim编辑器     文本编辑器:         文本:纯文本,ASCII text;Unicode;     文本编辑种类:         行编辑器:sed         全屏编辑器:na…

    Linux干货 2016-09-26
  • 第一周-2:Linux部分常用命令使用示例、查看命令行工具使用手册以及LinuxFHS部分目录简介

    一、部分命令使用示例: 1、ifconfg 在命令行界面下或系统配置脚本中用于配置、控制及查询TCP/IP网络接口的系统管理工具 [netartisan@localhost 桌面]$ ifconfig eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500 &n…

    Linux干货 2016-11-07
  • 网络基础知识子网划分

    一、某公司申请到一个C 类IP 地址,但要连接6 个的子公司,最大的一个子 公司有26 台计算机,每个子公司在一个网段中,则子网掩码应设为?  根据要划分的子网数量来算子网掩码的。2的M次方大于等于N。其中M是划分子网时要借的位数。N是要划分的子网数。 将需求代入公式,M=3,C类IP默认的掩码为24位,再从主机位中借来3位,就是27位。二进制表示…

    Linux干货 2016-09-06
  • 推荐-DNS BIND初探

    DNS BIND DNS BIND 正向解析 反向解析 从服务器 子域授权 转发 view DNS 什么是DNS? DNS是domain name system,域名系统的简写,负责实现域名与IP的转换。 DNS的功能是什么? DNS能够将IP地址与域名相互双向转换,能够实现域名访问。 DNS的历史:  1. 初期网络…

    2016-04-19
  • 难搞的grep、find练习题

    马哥教育网络班21期-第五周博客作业 1、显示/boot/grub/grub.conf中以至少一个空白字符开头的行; [root@caicai ~]# grep –color "^[[:space:]]\+" /boot/grub/grub.conf    …

    Linux干货 2016-07-26
  • M22 使用NFS实现web共享发布

    实验目的: 搭建两个LAMP web发布系统搭建WordPress博客网站,并使用NFS作为共享的网络文件系统使这两个web服务器发布的内容一致。 实验工具: webServer1 Centos6.8 172.18.55.6 webServer2 Centos7.3 172.18.55.7 nfsServer Centos7.3 172.18.55.71 w…

    2017-04-26