sed

sed是一种流编辑器,用来从输入流中读取内容并完成转换,输入流可以来自一个文件,也可以来自一个管道。

此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

1、语法

       sed [选项]  file

 

2、选项列表

选项

说明

--version

显示命令版本信息

--help

显示帮助文档

-n | --quite | --slient

静默模式

-e | --expression=script

给指令添加脚本

-f | --file=script-file

将文件内容作为脚本,追加给指令

--follow-symlinks

处理到位时遵循符号链接;硬链接仍将被破坏。

-i[SUFFIX]  |  --in-place[=SUFFIX]

编辑文件到位(如果提供了扩展名,则进行备份)。默认的操作模式是中断符号链接和硬链接。这可以通过跟随符号链接和复制来改变。

-c  |  --copy

当在-i模式下对文件进行洗牌时,请使用复制而不是重命名。虽然这将避免断开链接(符号或硬链接),但结果的编辑操作并不是原子操作。这很少是想要的模式;-遵循符号链接通常就足够了,而且它更快、更安全。

-l | --line-length=N

指定每一行最大字符数,超过就自动换行

--posix

禁用所有的GNU表达式

-r | --regexp-extended

在脚本中使用扩展正则表达式。

-s

将文件看作是分离的,而不是单独连续的长字符串

-u | --unbuffered

从输入文件中加载最少数量的数据,并更频繁地刷新输出缓冲区。

如果没有给出-e、--expression,、-f或-file选项,那么第一个非选项参数将作为sed脚本进行解释。其余的参数都是输入文件的名称;如果没有指定输入文件,则读取标准输入。

 

命令

说明

没有地址的命令

: label

b和t命令的标签

#comment

注释将扩展到下一行(或-e脚本片段的末尾)。

}

{}块的结束括号

没有地址或者一个地址的命令

=

打印当前的行号

a \

text

追加文本,在换行符之前有一个嵌入的反斜杠

i \

text

插入文本,在换行符之前有一个嵌入的反斜杠

q [exit-code]

立即退出sed脚本,而不处理任何更多的输入,除非自动打印没有被禁用,当前的模式空间将被打印出来。退出代码参数是一个GNU扩展。

Q [exit-code]

立即退出sed脚本,而不处理任何更多的输入。这是一个GNU扩展

r filename

附加从文件中读取的文本。

R filename

附加从文件读取的一行。命令的每次调用都从文件中读取一行。

接受地址范围的命令

{

开始一个命令块(以)结尾)

b label

分支到标签;如果省略标签,则分支到脚本的末尾。

t label

如果“s///”自读取上一个输入行以来以及从最后一个t或T命令开始已成功地进行了替换,则从“分支到标签”;如果省略“标签”,则将其分支到脚本的末尾。

T label

如果自读取上一个输入行以来,以及自最后一个t或T命令以来,没有“s///”已成功地进行了替换,则从“分支到标签”;如果省略“标签”,则从“分支到脚本的末尾”。这是一个GNU扩展。

c\

text

用文本替换徐那种的行,在换行符之前有一个嵌入的反斜杠

d

删除模式空间。开始下一个周期。

D

删除模式空间中的第一个嵌入换行符。开始下一个周期,但如果模式空格中仍然有数据,则跳过从输入中读取。

h H

复制/追加模式空间到保持空间

g G

复制/追加保持空间到模式空间

x

交换持有空格和模式空格的内容

l

以“视觉清晰”的形式列出当前行。

l width

以“视觉清晰”的形式列出当前行,在宽度width处将其拆分。这是一个GNU扩展。

n N

在模式空间中读取/追加下一行输入

p

打印到当前模式空间

P

打印到当前模式空间的第一个嵌入换行符

s/regexp/replacement/

尝试将regexp与模式空间匹配。如果成功,则将该部分替换为替换部分。替换可以包含特殊字符&引用匹配的模式空间的那一部分,特殊转义\1到\9引用regexp中相应的匹配子表达式。

w filename

将当前模式空间写入文件名

W filename

将当前模式空间的第一行写入文件名。这是一个GNU扩展。

y/source/dest/

将在源中出现的模式空间中的字符音译为dst中相应的字符。

3、地址

SED命令可以在没有地址的情况下给出,在这种情况下,命令将对所有输入行执行;使用一个地址,则只对与该地址匹配的输入行执行该命令;或者使用两个地址,在这种情况下,将对所有与从第一个地址开始并继续到第二个地址的包含行范围匹配的输入行执行命令。关于地址范围,需要注意三件事:语法是addr 1,addr 2(即地址用逗号分隔);addr 1匹配的行将始终被接受,即使addr 2选择了前面的行;如果addr 2是regexp,则不会根据addr 1匹配的行对其进行测试。

在地址(或地址范围)之后,在命令之前,可以插入一个“!”,这指定只有当地址(或地址范围)不匹配时才执行命令。支持以下的地址类型“

       number,只匹配指定的行号。

       first~step,从指定的行first开始,每step行匹配一次。

       $,匹配最后一行。

       /regexp/,匹配正则表达式regexp的行。

       \cregexpc,匹配正则表达式regexp的行。c可以是任何字符

       0,addr2,从“匹配的第一个地址”状态开始,直到找到addr 2为止。这类似于1,addr 2,但如果addr 2匹配输入的第一行0,addr 2表单将位于其范围的末尾,而1,addr 2窗体仍将位于其范围的开头。这只在addr 2是正则表达式时才起作用。

       addr1,+N,将匹配addr 1和addr 1后面的N行。

       addr1,~N,将匹配addr 1和addr 1后面的行,直到输入行号为N的倍数的下一行为止。

4、实例

从一个文件读取内容输入到另一个文件

[root@192 weijie]# cat 1.c                      //查看文件内容

hello world, 

i am david. 

i love linux, 

love code.

nihao ed

[root@192 weijie]# sed r 1.c >> 2.c           //1.c读取,写入到2.c

[root@192 weijie]# cat 2.c                      //查看内容

123

23

212

hello world, 

i am david. 

i love linux, 

love code.

nihao ed

Linux基础命令---文本编辑sed的更多相关文章

  1. Linux基础命令---文本编辑ex

    ex ex会启动vim编辑器,它的执行效果和vim –E相同.从ex模式回到普通模式,可以在vim中输入:vim. 此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.SUSE.op ...

  2. Linux基础命令---文本编辑tee

    tee 将标准输入的内容复制到指定的文件中,同时在标准输出中显示. 此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.SUSE.openSUSE.Fedora.   1.语法   ...

  3. linux基础命令之sed

    什么是sed? sed是一个流编辑器,英文全名为stream editor,流的意思就是能处理文件或者通过管    道传输来的数据.主要针对行,也就是行编辑.默认是不编辑文件的,处理时,把当前    ...

  4. [转帖]linux常用命令大全(linux基础命令入门到精通+实例讲解+持续更新+命令备忘录+面试复习)

    linux常用命令大全(linux基础命令入门到精通+实例讲解+持续更新+命令备忘录+面试复习) https://www.cnblogs.com/caozy/p/9261224.html 总结的挺好的 ...

  5. Linux基础命令小结(超全!!)

    Linux目录结构 1.bin 存放经常使用的指令比如ll,cp 2.sbin 系统管理员使用的系统管理指令 3.home 存放普通用户的住目录 4.root 系统管理员的用户主目录 5.boot 存 ...

  6. 第四节,Linux基础命令

    第四节,Linux基础命令 命令是系统操作员对系统传入的指令,传入指令后回车,系统接收到指令做出相应的行为 1.查看用户位于系统什么位置 [pmd]检查操作用户位于系统的什么位置 命令         ...

  7. 【Python之路】第一篇--Linux基础命令

    pwd 命令 查看”当前工作目录“的完整路径 pwd -P # 显示出实际路径,而非使用连接(link)路径:pwd显示的是连接路径 .   表示当前目录 ..  表示上级目录 /  表示根目录 ls ...

  8. linux基础命令学习笔记(二)

    linux基础命令学习笔记(二) 1.kill :终止进程  kill pid (唯一标示一个进程) kill -9  强制终止  kill -15 命令未结束不能终止 # ps aux 查看所有进程 ...

  9. 2.Linux基础命令

    linux内一切皆文件,没有文件夹只有目录,目录也是一种文件 1.一些常用按键: 将鼠标的光标从虚拟机里切换回来:Ctrl+Alt 拖动Ubuntu内的对话框:Alt键+鼠标左键拖动 清屏:Ctrl+ ...

随机推荐

  1. Spring Security 4.2.3 Filters 解析

    一. 熟悉一个模块的最快方法 1. 配置logback文件,打印相应的debug信息 2. 根据相应的信息,打断点查看执行结果 二.spring 使用 DelegatingFilterProxy 管理 ...

  2. 前端 HTML body标签相关内容 常用标签 分割线 <hr>

    分割线 <hr> <hr>标签用来在HTML页面中创建水平分隔线,通常用来分隔内容 <!DOCTYPE html> <html lang="en&q ...

  3. 帝国cms搜索关键字调用标签(showsearch)怎么用

    前面ytkah介绍了如何让帝国CMS7.2搜索模板支持动态标签调用,现在我们来说说怎么调用帝国cms搜索关键字调用标签(showsearch).在帝国cms后台那边的使用方法:[showsearch] ...

  4. 报错解决——OSError: libdarknet.so: cannot open shared object file: No such file or directory

    在python目录下打开终端,输入 python darknet.py 结果报错 Traceback (most recent call last): File “darknet.py”, line ...

  5. PS游戏摸拟器ePSXe加速游戏速度方法

    1.启动ePSXe游戏摸拟器. 2.菜单栏上的设置->视频->在视频设置窗口 设置主视频插件->设置. 3.在设置插件的窗口帧速率选择框中 勾上使用帧速率限制 点选帧速率限制为(10 ...

  6. (转)Docker镜像构建上下文(Context)

    镜像构建上下文(Context) Docker在构建镜像时,如果注意,会看到 docker build 命令最后有一个 ... 表示当前目录,而 Dockerfile 就在当前目录,因此不少初学者以为 ...

  7. DLNg[结构化ML项目]第二周迁移学习+多任务学习

    1.迁移学习 比如要训练一个放射科图片识别系统,但是图片非常少,那么可以先在有大量其他图片的训练集上进行训练,比如猫狗植物等的图片,这样训练好模型之后就可以转移到放射科图片上,模型已经从其他图片中学习 ...

  8. 2018-2019-1 20189221 《Linux内核原理与分析》第六周作业

    2018-2019-1 20189221 <Linux内核原理与分析>第六周作业 实验五 实验过程 将Fork函数移植到Linux的MenuOS fork()函数通过系统调用创建一个与原来 ...

  9. python package

    简要说一下,一个python模块就是一个python文件:一个包就是存放python模块的目录结构,并且包下边必须要有一个可以为空的__init__.py模块 //test.py from mypac ...

  10. 解读经典面试题for循环console.log

    for (var i = 1; i <= 5; i++) { setTimeout(function () { console.log(i) },1000)} 会打印出5个6,这是why 因为 ...