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
下一篇 2017-08-15

相关推荐

  • 正则表达式

         正则表达式是由一类特殊字符所编写的模式,通过这些字符的使用,我们能检索 查找文本中符合某些规则的内容。 正则表达式元字符的分类有:字符匹配,匹配次数,位置锚定,分组等。      字符匹配:      . : 匹配任意单个字符     &n…

    Linux干货 2017-04-06
  • 几个常用命令、inode及第二周作业

    一、cd命令 1、功能 用来进行不同目录间的切换,属于内部命令。 2、语法 cd  [-L|-P]  [dir] -L : 如果要切换到的目录是一个符号链接,就直接切换到符号链接名表示的目录(默认)。 -P : 如果要切换到的目录是一个符号链接,直接接切换到符号链接指向的目标目录。 3、用法说明 cd 或 cd ~ :进入当前用户的主目录…

    Linux干货 2016-08-02
  • 0808文本处理作业

                           1 、删除/etc/grub2.conf 文件中所有以空白开头的行行首的空白字符。 答:sed  ‘@^[[:space]]\+@@’  /etc/grub2/cf…

    Linux干货 2016-08-11
  • select循环解析

    前言:   select命令用于创建菜单,在select循环执行时会根据list数组给出选择菜单,用户选择后的结果保存在变量中,然后给出菜单,等待用户选择。select是个死循环,如果用户用户想跳出选择循环,需要在循环体中根据条件增加break语句。 格式: select variable in list do 循环体命令 done 示例: 在这个…

    Linux干货 2016-08-24
  • 马哥教育网络班22期+第1周课程练习

    Linux的发行版以及不同发行版之间的联系与区别    Linux发行版主要的大分支有三个:dibian  S.U.S.E  redhat 一个操作系统由kernel和application组成。编译封装的时候根据不同的application,可以编译成不同的发行版本。 所有的linux发行版都是基于GPL的版权,它们…

    Linux干货 2016-08-15
  • 8-15作业

    1、写个脚本,实现以下三角形    *   ***  ***** ******* #!/bin/bash # read -p " input a number : " n for l&nbs…

    Linux干货 2016-08-21