sed  文本流编辑的  编辑器

hold space :保持空间。仓库,半成品

一次从文件中读取一行,放到自己编辑的内存缓冲空间即模式空间,不会编辑原文件;根据所给定的命令在模式空间中做编辑处理,处理结果默认输出到显示屏

sed [OPTION]... {script-only-if-no-other-script} [input-file]...

常用选项:

  -n :不输出模式空间中的内容至屏幕

  -e : 多点编辑 一个sed中实现多个编辑操作

  -f :/PATH/TO/SCRIPT_FILE :从指定文件中读取编辑脚本

  -r :支持使用扩展表达式,默认expr

  -i :原处编辑即修改原文件  注慎用先备份

一、地址定界:

  a) 不给地址:对全文进行处理

     # sed  'd'  /etc/passwd

  b) 单地址: 

    # : 指定的行

       sed  '5d'  /etc/passwd

    /pattern/ :被此处模式所能够匹配到的每一行

       sed  '/^#/d'  /etc/fstab

  c) 地址范围:

    

  d)  $ (^$ 、^[[:space:]]*$)

删除某文件中的空行
sed '/^$/d' /tmp/fstab
删除某文件中空白行
sed '/^[[:space:]]*$/d' /tmp/fstab

  e) !  表示方法:地址定界!  取反条件    

删除地址界定的行
sed '/^UUID/d' /etc/fstab 删除非地址界定的行
sed '/^UUID/!d' /etc/fstab

  f)  ~ 步进

奇数行
sed -n '1~2p' /tmp/fstab
sed '2~2p' /tmp/fstab 偶数行
sed -n '2~2p' /tmp/fstab
sed '1~2p' /tmp/fstab

二、编辑命令:

   d : 删除范围内的行

 删除地址范围内的行
sed '/^UUID/d' /tmp/fstab
  sed '1.3d' /tmp/fstab

      p : 打印当前模式空间中的内容  

 sed 'p' /tmp/fstab
每一行会显示2遍,因为sed默认打印模式空间中的内容,符合条件的内容又打印一遍。
 sed -n 'p' /tmp/fstab
仅显示符合条件的行
  
   sed -n '/^UUID/p' /tmp/fstab
   sed -n '1p' /tmp/fstab

   a \'text'  在地址界定行的下一行追加(append)文本

     支持换行追加:\n

在某文件第一行之后添加
sed '1a \hello ' /tmp/fstab 在某文件的1到3行每一行追加文本
sed '1,3a \hello ' /tmp/fstab [root@localhost tmp]# sed -n '/^UUID/a \hello \nHow are you ? ' /tmp/fstab
hello
How are you ?

 i \'text'  在地址界定行的上一行插入(insert)文本

     支持换行插入:\n

在某文件第一行之上插入
sed '1i \hello ' /tmp/fstab 在某文件的1到3行每一行掺入文本
sed '1,3i \hello ' /tmp/fstab [root@localhost tmp]# sed -n '/^UUID/i \hello \nHow are you ? ' /tmp/fstab
hello
How are you ?

 c \'text'  在地址界定的行   替换为text

     支持换行替换:\n

替换某文件第一行
sed '1c \hello ' /tmp/fstab 替换某文件的1到3行,为指定的text
sed '1,3c \hello ' /tmp/fstab [root@localhost tmp]# sed -n '/^UUID/c \hello \nHow are you ? ' /tmp/fstab
hello
How are you ?

w /PATH/TO/SOMEFIE  将地址界定的行,保存至/PATH/TO/SOMEFIE中

sed  '/^UUID/w /tmp/a.txt ' /tmp/fstab

sed -n '/^UUID/p'  /etc/fstab > b.txt

  r /path/to/somefile :读取指定文件的文本流至模式空间中匹配到的行的行后


将某文件中的内容插入至指定文件中
  sed  '/^UUID/r  /etc/issue' /etc/fstab 
  sed '1,3r /etc/centos-release' /etc/issue   #多行插入文本时,在其后插入

  

  = :为模式空间中的行打印行号     

编号:在匹配到的行,上面编号

sed '/^UUID/='  /tmp/fstab
sed '=' /tmp/fstab

  s/// : 支持使用其它分隔符,或使用s@@@ 、s###  、s||| 、s,,

    替换标记  :

      g 全局替换

      p : 显示替换成功的行

      w /PATH/TO/SOMEFILE  : 将替换成功的结果保存至指定文件中

      i : 忽略pattern的字符大小写

  sed -n 's/r..t/&er/p' /etc/passwd      #此处“&”代表引用前面的“r..t”

  # sed 's,,,w /PATH/TO/SOMEFILE' FILE
  # sed 's,,,' FILE > /PTH/TO/SOMEFILE
  [root@localhost bin]# head -n 1 < /etc/passwd | sed 's,rOOt,ROOT,gi'
  ROOT:x:0:0:ROOT:/ROOT:/bin/bash

   

向后引用:

  正则表达式引擎将 括号中模式匹配到的内容 记录至内置特殊变量中 \1  \2  \3  ....

     s/([a-z]*([^/]+))

        \1 此处例子代表[a-z]*[^/]+ 所匹配到内容

        \2 [^/]+  所匹配到的内容

   基本正则表达式:\(\)

    扩展正则表达式:()

练习1:删除/boot/grub/grub.conf文本中所有以空白开头的行行首的空白字符

    sed  's@^[[:space:]]\+@@'  /tmp/grub.conf
CentOS :
# cp /etc/grub2.cfg /tmp/grub2.cfg
# sed -i 's,^[[:space:]]\+,,' /tmp/grub2.cfg

练习2:删除/etc/fstab文件中所有以#开头,后面至少跟一个空白字符的行的行首的#和空白字符

  sed 's@^#[[:space:]]\+@@'  /tmp/fstab
  
sed -i -r 's|^#[[:space:]]+||' /tmp/fstab

练习3:echo 一个绝对路径给sed命令:取出其基名,取出目录名  

目录
  echo /etc/fstab | sed 's@[^/]\+/\?$@@'
基名
  echo /etc/fstab | sed -r 's@(.*/)@@' 

[root@localhost tmp]# echo /etc/fstab | sed -r 's@(.*/)([^/]+$)@\2@'

三、高级编辑命令:(不常用)

模式空间(pattern)  保持空间(hold space)

注:保持空间不会做任何处理

   ------》to hold 

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

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

get《-----

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

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

  

      x <----->将模式空间中的内容与保持空间的中内容进行互换

  n    匹配到的行 在处理时,将其下一行覆盖至模式空间中

   N   匹配到的行  在处理时,将其下一行追加至pattern

  

   d   匹配到的行 处理时,删除模式空间中的单行;

   D 删除多行模式空间中的多行

sed -n 'n,p'  FILE    显示偶数行

sed  'n;d'  FILE        显示奇数行

tac FILE  逆向显示文件内容

  sed  '1!G;h;$!d' FILE    逆向显示文件内容
  sed -n '1!G;h;$p' FILE

sed '$!N;$!D'  FILE <==> tail -2 FILE  显示文件最后两行

sed '$!d'  FILE   取出文件最后一行

每一行后添加一个空白行

  sed 'G'  FILE 

  sed 'a\ '  ''  FILE 

sed 'g' FILE  全部替换为空白行 

sed  '/^$/d;G'  FILE  删除多个空白行,在每个行后添加一个空白行

sed基础的更多相关文章

  1. linux之sed基础命令详解

    sed (Stream  EDitor)是一个强大的字符流编辑器,输入一般是来自文件,默认情况下不编辑原文件,仅对模式空间中的数据作处理;而后,将模式空间打印到屏幕显示 sed基础用法 sed [op ...

  2. 文本三剑客---sed 基础

    sed编辑器被称作流编辑器(stream editor),和普通的交互式文本编辑器恰好相反.在交互式文本编辑器中(比如vim),你可以用键盘命令来交互式的插入.删除或者替换数据中的文本.流编辑器则会自 ...

  3. linux之 sed 基础

    转载:https://www.cnblogs.com/chensiqiqi/p/6382080.html sed 介绍 Sed命令是操作,过滤和转换文本内容的强大工具.常用功能有增删改查(增加,删除, ...

  4. Linux中sed基础

    sed是一种流编辑器,它是文本处理中非常重要的工具,能够完美的配合正则表达式使用,功能不同凡响.处理时,把当前处理的行存储在临时缓冲区中,称为"模式空间"(pattern spac ...

  5. sed基础语法

    sed 太强大了 参考博客如下:https://www.cnblogs.com/ctaixw/p/5860221.html sed: Stream Editor文本流编辑,sed是一个“非交互式的”面 ...

  6. 文本处理工具——sed基础

    一sed介绍 三剑客是grep,sed,awk,功能都很强大. 其中sed是Stream EDitor,流编辑器 行,编辑器的简写,它一次处理一行内容. sed的强大在于可以对文件进行修改,很适合在脚 ...

  7. sed的基础应用

    sed是一个非交互式的文本编辑器:sed一行一行的处理文件 sed有模式空间(主要活动空间)和缓存空间(辅助空间)两个空间: 模式空间(pattern space)将文件中的一行内容读取到临时缓冲区( ...

  8. 关于sed用法

    sed处理流程 sed的处理流程,简化后是这样的: 1.读入新的一行内容到缓存空间: 2.从指定的操作指令中取出第一条指令,判断是否匹配pattern: 3.如果不匹配,则忽略后续的编辑命令,回到第2 ...

  9. SED入门

    使用Linux多年,SED和AWK两大神器却始终无法得心应手的来提高自己的工作效率,每每需要查找替换,都要依赖于ST2等一众图形工具,深感愧疚,乃专门抽时间学习之,志在使之真正成为左右手.   SED ...

随机推荐

  1. 开启HSTS让浏览器强制跳转HTTPS访问

    开启HSTS让浏览器强制跳转HTTPS访问 来源 https://www.cnblogs.com/luckcs/articles/6944535.html 在网站全站HTTPS后,如果用户手动敲入网站 ...

  2. Go part 1 初探

    Go 语言简介 Go 语言是 Google 在2007年开发的一种开源编程语言,于2009年11月10日向全球公布 出自 Ken Thompson 和 Rob Pike.Robert Grieseme ...

  3. (详细)JAVA使用JDBC连接MySQL数据库(1)- 软件

    欢迎任何形式的转载,但请务必注明出处. 本节为下面四个的安装和配置 jdk Eclipse MySQL mysql connectors 一.jdk 点击查看安装和环境配置教程 二.Eclipse 点 ...

  4. React中setState如何修改深层对象?

    在React中经常会使用到setState,因为在react生态中,state就是一切.在开发过程中,时长会在state中遇到一些比较复杂的数据结构,类似下面这样的: 这时需要我们修改list中obj ...

  5. 【Distributed】分布式锁

    一.概述 1.1 分布式解决的核心思路 1.2 分布式锁一般有三种实现方式 二.基于Redis的分布式锁 2.1 使用常用命令 2.2 实现思路 2.3 核心代码 Maven依赖信息 LockRedi ...

  6. Linux网络管理——nslookup

    使用参考: https://www.computerhope.com/unix/unslooku.htm https://www.thegeekstuff.com/2012/02/dig-comman ...

  7. linux 基础12-程序与资源管理

    1. 基础概念 可执行的二进制文件就是程序 执行程序的时候因触发事件而获取的ID,称为PID 在登入并执行bash时,系统依据登录者的UID/GID给登录者一个PID/GPID/SID等 启动程序时, ...

  8. python的set集合去重功能

    # -*- coding:utf-8 -*- setData=set([]) #第一种方式,通过add()添加元素 setData.add('china\n') setData.add('turky\ ...

  9. FreeRTOS编程风格

    数据类型 基本使用的是标准C里面的数据类型,但是针对不同的处理器,对标准C的数据类型又进行了重定义: 在FreeRTOS中详细的数据类型重定义在portmacro.h这个文件中,具体如下: /* Ty ...

  10. 使用pyinstaller打包使用cx_Oracle模块的程序出现The specified module could not be found的问题

    pyinstaller看起来并不会将动态链接库自动打包,所以我们需要告诉pyinstaller要打包哪些动态链接库,步骤如下(假设python文件名为 oracletest.py): 1. 使用pyi ...