sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。然后读入下行,执行下一个循环。如果没有使诸如‘D’的特殊命令,那会在两个循环之间清空模式空间,但不会清空保留空间。这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。

  功能:主要用来自动编辑一个或多个文件,简化对文件的反复操作,编写转换程序等。

格式:

sed [options] 'script'  FILE ...

options

  -n:静默模式,不输出模式空间中的内容,一般编辑命令p打印一起用

  -r:扩展的正则表达式

  -f:/path/to/sed_script_file:指定sed脚本文件,和-e效果一样

  -e 'script' -e 'script':指定多个编辑指令,前后script都要加-e

  -i:直接编辑原文件

  -i.bak  做备份后直接修改.bak这个后缀可以自定义如.backup| -i.back_`date +%F`

script

  地址定界

    1)startline,endline

      1,3  1到3行

      1,$  1到最后一行

      1,+10   1向后10行

      1,/pat1/   1到pat1匹配行

      1~2        第一行开始,步径2,相当于显示奇数行

      2~2        第二行开始,步径2,相当于显示偶数行

    2)/pat1/,/pat2/ #从模式1-模式2的所有行

    3)/parttern/   #被模式匹配到的所有行,此处/不能替换成其他符号

    4)不给地址,对全文处理

  编辑命令

    d:删除

    p:打印,显示模式空间中被匹配到的内容,一般和-n一起使用,与d命令效果相反

    i\text:在匹配行前面插入一行text信息,支持\n实现多行,\也可以省略,如果要加空格不能省略

    a\text:在匹配行后面插入一行test信息,支持\n实现多行

    c\text:替换符合条件行为单行或多行文本

    r /path/to/somefile:把另外一个文件的内容插入匹配到行的下面一行

    w /path/to/somefile:将符合条件的所有行保存至指定的文件中

    =:显示符合条件行的行号

    !:取反条件,在编辑命令之前添加!,如!d !p

  sed查找替换

    格式:sed '地址定界s/查找条件/替换文本/' file

    s///:查找条件可以使用模式,但是要替换的内容不行s@@@|s###|s%%%|s&&&,大多数符号都可以

      s///g:行内所有匹配项都进行替换

      s///i:ignore-case,不区分字符大小写

      s///w: /path/to/somefile

    注意:

    1、进行替换的时候不要加-n选项,和p打印选项。-n会清空其他内容。p打印选项会复制匹配到的内容

    2、替换内容如果引用变量需要使用三个'如:s@xxxx@'''$LANG'''@

举例

、开头行上方插入行
# sed '/^#/i \\' /etc/fstab # 插入1行空行
# sed '/^#/i \\n' /etc/fstab # 插入2行空行
# sed '/^#/i \\n\n' /etc/fstab # 插入3行空行 、替换/etc/inittab文件中"id:3:initdefault:"一行中的数字为3
# sed 's@\(id:\)[0-9]\(:initdefault\)@\13\2@' /etc/inittab 、删除/etc/init.d/functions文件中的空白行
# sed '/^$/d' /etc/init.d/functions 、删除/etc/inittab文件中位于首行的#
# sed 's@^#@@' /etc/inittab 、删除/etc/rc.d/rc.sysinit文件中以#后跟至少一个空白字符开头的行的行首的#和空白字符
#sed 's@^#[[:space:]]\1{1,\}@@g' /etc/rc.d/rc.sysinit 、删除/boot/grub/grub.conf文件中首行的空白字符
#sed 's@^[[:space:]]\{1,\}@@' /boot/grub/grub.conf 、取出一个文件路径的目录名称,如/etc/sysconfig/network,其目录为/etc/sysconfig,功能类似dirname命令
echo /etc/sysconfig/network | sed 's@[^/]\{1,\}/\?$@@' 、从第10行到最后一行加上开头#
# sed '10,$s/^/#/' XXXX.txt 、把一行中的多个空格变成一个空格
#sed 's@[[:space:]]\{1,\}@ @g' xxxx.txt

sed高级用法

  前面基本用法中也有提到模式空间,即为处理文件中一行内容的一个临时缓冲区。处理完一行之后就会把模式空间中的内容打印到标准输出,然后自动清空缓存。而这里说的保持空间是sed中的另外一个缓冲区,此缓冲区正如其名,不会自动清空,但也不会主动把此缓冲区中的内容打印到标准输出中。而是需要以下sed 命令进行处理:

  高级编辑命令:

    p:打印模式空间开端至\n

    h:把模式空间中的内容覆盖至保持空间

    H:把模式空间中的内容追加至保持空间中

    g:从保持空间取出数据覆盖至模式空间

    G:从保持空间取出内容追加至模式空间

    x:把模式空间中的内容与保持空间中的内容进行互换

    n:读取匹配到的行的下一行至模式空间

    N:追加匹配到的行的下一行至模式空间

    d:删除模式空间中的行

D:如果模式空间包含换行符,则删除直到第一个换行符的模式空间中的文本,并不会读取新的输入行,而使用合成的模式空间重新启动循环。如果模式空间不包含换行符,则会像发出d命令那样启动正常的新循环

举例

、显示偶数行
# sed -n 'n;p' FILE 、显示奇数行
# sed 'n;d' n.txt 、倒叙显示
# sed '1!G;h;$!d' FILE
# sed -n '1!G;h;$p' FILE 、取出文件后两行
# sed '$!N;$!D' FILE
# sed 'N;$!D' FILE 、取出文件最后一行
# sed '$!d' FILE 、在每一行后面都加入空白行
# sed 'G' FILE 、把多个空行删掉,每行后面加一空行
# sed '/^$/d;G'FILE

Linux命令:sed命令的更多相关文章

  1. linux 的sed命令解释 sed ':t;N;s/\n/,/;b t' 将换行符换成逗号

    linux 的sed命令解释 sed ':t;N;s/\n/,/;b t' 将换行符换成逗号 实现的功能是吧换行符换成逗号了,自己试验过. 求解释,:t N b t 都是什么意思??? :t 定义la ...

  2. linux中sed命令(全面解析)

    目录 一:linux中sed命令介绍 1.sed作用 2.sed命令格式 3.参数 4.sed的编辑模式 5.sed参数解析用法 二:sed 参数 -f 案例实战解析 1.前介 2.引入简介 3.方法 ...

  3. Linux系统sed命令常用参数实战

    Linux系统sed命令常用参数实战 常用参数 -n 输出某行的文本内容,通常与p联合使用, -e 命令行模式下进行sed的动作编辑,输出编辑后的内容,源文件不会发生变化 -f 以命令中指定的scri ...

  4. linux下sed命令对文件执行文本替换

    让我们看一下 sed 最有用的命令之一,替换命令.使用该命令,可以将特定字符串或匹配的规则表达式用另一个字符串替换.下面是该命令最基本用法的示例: $ sed -e ‘s/foo/bar/’ myfi ...

  5. linux中sed命令的使用

    sed命令是linux或者shell编程中常用的筛选.替换命令,如果能熟练使用sed则对经常使用的人来说在工作上是非常有帮助的 下面把sed主要的用法列出来(有错误的地方大家可以指正): p命令只打印 ...

  6. 转 linux之sed命令详解

    http://jingyan.baidu.com/article/fec4bce2228f60f2618d8bb0.html sed  编辑裁剪文件命令 sed -i "s/\/db\/te ...

  7. Linux shell sed命令使用

    Linux处理文本文件的工具:     grep        过滤文件内容     sed            编辑文件内容     awk             正则表达式Regex      ...

  8. linux(centos8):sed命令的应用例子

    一,sed命令的用途 sed是Linux下一款功能强大的非交互流式文本编辑器, 可以对文本文件进行增.删.改.查等操作, 支持按行.按字段.按正则匹配文本内容. 说明:刘宏缔的架构森林是一个专注架构的 ...

  9. Linux shell sed命令在文件行首行尾添加字符

    昨天写一个脚本花了一天的2/3的时间,而且大部分时间都耗在了sed命令上,今天不总结一下都对不起昨天流逝的时间啊~~~ 用sed命令在行首或行尾添加字符的命令有以下几种: 假设处理的文本为test.f ...

  10. Linux之sed命令常见用法

    1. sed(stream editor),流编辑器 linux中,主要中sed命令实现对文件的增删改替换查 名称 sed - 用于过滤和转换文本的流编辑器 SYNOPSIS sed [选项]... ...

随机推荐

  1. ARM架构安装Anaconda3出现错误:cannot execute binary file: Exec format error

    ARM架构安装Anaconda3出现错误:cannot execute binary file: Exec format error 原因是:安装包格式不对. 在Anaconda官网上只有x86(32 ...

  2. Ubuntu18.04安装Vim-plug与YCM

    由于个人强迫症的原因,之前的ycm是通过vundle来管理的,这次想更新一下ycm发现问题太多,于是就重新装了个Ubuntu虚拟机,用vim-plug来进行管理ycm及其他插件. 首先要换一下Ubun ...

  3. 微信支付之H5支付

    HoJe男孩子你要加油阿 前言准备材料H5支付请求的参数返回结果统一下单回调接口用到的工具类886 . 前言 大家好,分享是快乐的,也见证了个人成长历程,文章大多都是工作经验总结以及平时学习积累,基于 ...

  4. Bugku-CTF加密篇之zip伪加密(flag.zip)

    zip伪加密

  5. NTP服务安装及时间同步

    1.安装ntp服务命令 yum install -y ntp 2.常用NTP服务器地址: ntp1.aliyun.com ntp2.aliyun.com ntp3.aliyun.com ntp4.al ...

  6. 用vscode写c/c++

    用vscode写c/c++ 1. 安装wsl windows下安装linux(ubuntu) 2. 打开设置 3. 输入run code 随便找一个地方粘贴,会出现一大段代码 4. 把c对应的代码修改 ...

  7. [C++_QT] 同步方式提交GET和POST请求

    #开始 最近在做一个需要用到提交HTTP请求的工具 但是遇到一个问题 如下 在Qt中提交一个get请求之后(或者post) 在收到回复之后会调用之前连接好的槽函数 但是问题就是在主调函数中不知道什么时 ...

  8. Linux下编译并使用miracl密码库

    参考:http://blog.sina.com.cn/s/blog_53fdf1590102y9ox.html MIRACL(Multiprecision Integer and RationalAr ...

  9. BZOJ - 2038 小Z的袜子(普通莫队)

    题目链接:小Z的袜子 题意:$n$只袜子,$m$个询问,每次回答有多大概率在$[L,R]$区间内抽到两只颜色相同的袜子 思路:普通莫队,如果两个询问左端点在一个块内,则按询问右端点排序,否则按照所在块 ...

  10. Hadoop之伪分布式安装

    一.Hadoop的安装模式有3种 ①单机模式:不能使用HDFS,只能使用MapReduce,所以单击模式主要用于测试MR程序. ②伪分布式模式:用多个线程模拟真实多台服务器,即模拟真实的完全分布式环境 ...