sed 强大的流文本编辑器浅析及示例演示

MarkdownPad Document

sed 流(行)编辑器

著有文本处理三剑客之称:grep , sed , awk

sed作为其中之一对于文本处理可谓是异常强大,能够大批量处理文本复杂繁琐的修改,添加,删除等操作,并能够完美的与正则表达式相结合使用.
处理文本时按数据流进行处理,每次读取文本的一行,将其放入缓冲区中称之为模式空间(pattern space),也可类比理解为工作台,然后根据地址定界或是正则表达式进行匹配,如果被匹配则执行其后的命令作出相应处理动作,而后读取下一行处理,不断重复.
值得注意的是sed默认会将读取到模式空间中的行输出到标准输出(一般是屏幕),并将处理完成后的行输出至标准输出.默认对文件本身不处理,仅处理模式空间中被模式匹配的行.

sed 命令使用格式:

sed [option] ‘AddressCommand‘ input-file...
sed  可选项   ‘地址定界命令‘  处理文本(可以是多个文件的列表处理)

option选项:

-n:只显示符合条件的行,静默模式关闭上面提到的默认打印模式空间至标准输出
-i:直接修改源文件(做任何修改操作之前先备份.bak)
-f:从文件读取编辑脚本(符合sed语法的脚本并非bash脚本)
-e:指定多个sed语法脚本,类似grep -e用法多点处理
-r:支持扩展的正则表达式
Address地址定界:

1. startline,endline  从第几行到几行

sed -n ‘1,100p‘ /var/log/yum.log /var/log/messages
   $:最后一行
     sed -n ‘$p‘ /var/log/yum.log
 $-1:最后第二2行
 1,+2d:删除第一行和紧跟其后的后两行(注意删除操作不加-n才可看到效果)
     sed ‘1,+2d‘ /etc/fstab
 ~:步进
     1~2p 从第一行开始,每次跳两行,也即奇数行
     1~2p 偶数行

2. /regexp/ 正则表达式匹配

/^root/

3./patternl/,/pattern2/ 第一次匹配到pattern1的行开始到第一次被pattern2匹配的行为止(注意并不是仅匹配一次,如果处理的文本中存在多个符合条件的组合将处理每个分组)
Command命令(触发动作):

  d:删除匹配的行,没被匹配的反而显示  
  p:显示匹配的行  
  a \string:在匹配到行后面追加显示stringa  
      \n 换行  
  i \string:在匹配到行前面追加显示string  
  c \string :替换,将string覆盖匹配的行  
  r file:将指定文件添加到匹配的行处  
  w file:将匹配到的内容另存至文件中  
  = 匹配的行加行号  
  ! 取反,没有被匹配的行做处理动作

替换和查找:

s/pattern/string/:  将pattern中匹配的字符串替换成string字符串,默认只处理模式空间中第一次被模式匹配的块,可通过其后的修饰符进行调整作用范围

   sed ‘s/fstab/testFSTAB/p‘ /etc/fstab    #将fstab替换为testFSTAB

标记符:

   g:全局          
   i:忽略大小写

s/ / /的形式也可是[email protected] @ @s# # # 甚至一些其他的字符作为分界,可自行测试
 匹配表达式和要替换的字符串之间可支持后向引用
   s/()/\1/:将第一个匹配的模式括号的内容引用到后面的\1处替换字符串
   &:对string字段引用,pattern中匹配的整个字符串

sed实例演示:

1.地址定界

显示/etc/fstab的9-12行

[root ~]# sed -n ‘9,12p‘ /etc/fstab
/dev/mapper/vg_root-lv_root /                       ext4    defaults        1 1
/dev/mapper/vg_root-lv_app /app                    ext4    defaults        1 2
UUID=9a92c305-beee-467f-9fe4-fd90b2e49743 /boot                   ext4    defaults        1 2
/dev/mapper/vg_root-lv_home /home                   ext4    defaults        1 2

2.步进及删除

查找/etc/fstab中除前7行后的奇数行(多种不同形式达到相同效果)

[root ~]# cat -n  /etc/fstab|sed  -n -e ‘1,7d‘ -e ‘1~2p‘(注两个-e的内容不可反写)
 9  /dev/mapper/vg_root-lv_root /                       ext4    defaults        1 1
11  UUID=9a92c305-beee-467f-9fe4-fd90b2e49743 /boot                   ext4    defaults        1 2
13  tmpfs                   /dev/shm                tmpfs   defaults        0 0
15  sysfs                   /sys                    sysfs   defaults        0 0
等价于:
[root ~]# cat -n  /etc/fstab|sed  -n ‘1,7d;1~2p‘
等价于:
[root ~]# cat -n  /etc/fstab|sed   ‘1,7d‘ | sed -n  ‘1~2p‘

3.a \在匹配的行后添加内容

实现将root用户的命令历史添加执行时间

[root ~]# sed -i ‘$a \export HISTTIMEFORMAT="`date "+%T"`"‘ /root/.bashrc
        #在/root/.bashrc的最后一行添加一条变量

4.正则匹配

关闭第3步的命令历史时间功能

[root ~]# sed -i ‘/.*HISTTIMEFORMAT.*/d‘ /root/.bashrc 
        # 注意-i 会直接修改源文件,事先备份

5.s///查找替换

实现将文本的4,8行加注释#

root ~]# sed -i.bak ‘2,5s/.*/#&/g‘ /etc/fstab
       #注意这里的&是后向引用的用法

6.读入文件并追加

将创建好的hosts文件内容,追加到/etc/hosts文件后
[root ~]# sed ‘$r hosts‘ /etc/hosts

7.匹配的信息另存为,也即写入文件

实现将/var/log/messages中关于网卡信息的分离至eth.log中
[root ~]# sed -n -r   ‘/eth[0-9]?/w eth.log‘ /var/log/messages

8.!取反

实现清除所有的#注释信息行

[root ~]# sed -n ‘/^#/!p‘ /etc/fstab
等价于
[root ~]# sed ‘/^#/d‘ /etc/fstab
时间: 2024-09-30 00:28:46

sed 强大的流文本编辑器浅析及示例演示的相关文章

[Linux学习笔记] Linux文本编辑器Vim/Vi

文本编辑器Vim: Vim/Vi是一个功能强大的全屏幕文本编辑器,是Linux/UNIX上最常用的文本编辑器. 它的作用是建立.编辑.显示文本文件. Vim/Vi没有菜单,只有命令. 插入命令 命令 作用 a 在光标后附加文本 A 在本行行末附加文本 i 在光标前插入文本 I 在本行开始插入文本 o 在光标下插入新行 O 在光标上插入新行 定位命令 命令 作用 h 方向左键. 左移一个字符 j 方向下键. 下移一行 k 方向上键. 上移一行 l 方向右键. 右移一个字符 $ 移至行尾 0 移至行

Linux学习笔记(10)文本编辑器vim

vim是一个功能强大的全屏幕文本编辑器,是Linux/Unix最常用的文本编辑器,其作用是建立.编辑.显示文本文件.vim的特点是没有菜单,只有命令. vim主要有三种工作模式,分别为命令模式.插入模式.编辑模式.三者的关系可由下图来表示: 1 vim常用操作 (1)插入命令 命令 作用 a 在光标所在字符后插入 A 在光标所在行尾插入 i 在光标所在字符前插入 I 在光标所在行首插入 o 在光标下插入新行 O 在光标上插入新行 (2)定位命令 命令 作用 :set nu 设置行号 :set n

文本编辑器vim

1.Vim简介 Vim是一个功能强大的全屏幕文本编辑器,是Linux/UNIX上最大的文本编辑器,它的作用是建立.编辑.显示文本文件. Vim没有菜单,只有命令. 2. 3.插入命令 命令 作用      a 在光标所在字符后插入      A 在光标所在行尾插入 i 在光标所在字符前插入 I 在光标所在行行首插入 o 在光标下插入新行 O 在光标上插入新行 4.定位命令       命令                               作用 :set nu 设置行号    :set

2016/8/19 5.1 文本编辑器Vim-Vim常用操作

1.简介 Vim是一个功能强大的全屏幕文本编辑器,是Linux/UNIX上最常用的文本编辑器. Vim没有菜单,只有命令 2.工作模式 进入:vi  filename 进入插入模式: a 在光标所在字符后插入 A 在光标所在行尾插入 i 在光标所在字符前插入 I 在光标所在行行首插入 o 在光标下插入新行 O 在光标上插入新行 进入命令模式:ESC或 : 定位命令: :set nu 设置行号 :set nonu 取消行号 gg 到第一行 G  到最后一行 nG 到第n行 :n 到第n行 $ 移至

(四)文本编辑器Vim/Vi

Vi和Vim都是文本编辑器,不同的是Vim是Vi的升级版本,它不仅兼容Vi的所有指令,而且还有一些新的特性在里面. Vim/Vi是一个功能强大的全屏幕文本编辑器,是Linux/UNIX上最常用的文本编辑器,它的作用是建立.编辑.显示文本文件. Vim/Vi没有菜单,只有命令 Vim/Vi的三种工作模式: 一.常用命令 1.插入命令 插入命令 命令 作用 a(append) 在光标后附加文本 A 在本行行末附加文本 i(insert) 在光标前插入文本 I 在本行开始插入文本 o 在光标下插入新行

文本编辑器中,你正在用谁?你最喜欢谁?最看好谁?原因?

豪情 ,一直在打杂,从未被超越 韦易笑等 113 人赞同 使用不同编辑器的原因在于不同的应用场景,就像使用浏览器一样.ide跟编辑器其实差别不大,都是完成开发的任务,我只是分析场景,所以一并列出来了.我的建议,等了解之后,在熟悉之后在合适的场景下选择合适的开发工具. 一般会有这几个场景: 一. 主力的开发工具,这个首推sublime text.主要优点有以下几点: 1. 功能强大,占用内存小,插件丰富,界面友好,可以免费试用(多谢评论区同学指正),适合前端开发这个岗位,支持语言比较多,可以跟不同

linux 文本编辑器Vim/Vi详细介绍

二:文本编辑器Vim/Vi(早起叫Vi后期升级版Vim) vim/vi是一个功能强大的全屏幕文本编辑器,是linux/unix上最常用的文本编辑器, 它的作用是建立.编辑.显示文本文件. vim/vi 没有菜单,只有命令 ----官方:www.vim.org 三种模式: vi filename 命令模式 按i.a.o 插入模式 :set nu 编辑模式(设定行号,这种就是编辑模式下,:号开头) 常用命令: 一组:插入命令 命令 作用 a 在光标后附加文本 A 在本行行末附加文本 i 在光标前插入

第4章 文本编辑器Vim

1. vim常用操作 1.1 vim简介 (1)vim是一个功能强大的全屏幕文本编辑器,是Linux/Unix上最常用的文本编辑器,它的作用是建立.编辑.显示文本文件. (2)vim没有菜单,只有命令. (3)vim编辑器的安装 ①所需的4个安装包vim-filesystem.vim-common.vim-enhanced.vim-minimal ②查看本机己经存在的包:#rpm –qa | grep vim ③安装vim编辑器:yum –y install vim* 1.2 vim编辑器的设置

Linux系统 vi/vim文本编辑器

Linux系统 vi/vim文本编辑器 (一)Vim/Vi简介 (二)Vim/Vi工作模式 (三)Vim/Vi基本使用 (四)Vim/Vi应用技巧 (一)Vim/Vi简介 Vim/Vi是一个功能强大的全屏幕文本编辑器,是Linux/UNIX上最常用的文本编辑器,它的作用是建立.编辑.显示文本文件.vim或者vi文本编辑是Linux下最常用的编辑器.vi 和vim 编辑器的区别是vim是vi的改进版本,在vi 编辑器的基础上上扩展了很多实用的功能. 大多数的linux/unix 发行版本中都使用