Linux下sed命令使用

1.Sed简介:

sed是一种在线流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出,个人认为这是sed的一个很大的特点,对文件不具有破坏性,另外sed还是非交互式的。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。使用sed和正则表达式结合使用,反映了sed的强大功能。

2.调用sed命令有两种模式

sed [options] 'command'

file(s)

sed [options] -f scriptfile file(s)

sed命令功能强大,用法灵活,一个命令如果功能强大,使用灵活的话基本就说明他有着很多的可选命令。sed也是一样,有着大量的可选命令。在这里我只演示一些sed命令的常用,基本的实例,让大家更容易快速理解sed的工作原理及使用。在本文的章节3 、4部分我会列出sed命令的可选命令及含义。

2.1.sed命令实例

通过以下的实例会让我们更快速理解sed的使用。initdbq.ora文件是本文所有实例的测试文件,并且在这个文件中增加了行号,能让我们更容易理解sed的工作方式。

环境准备:

[root@db10g1 sed]# cat initdbq.ora

1 dbq.__large_pool_size=4194304

2 dbq.__shared_pool_size=83886080

3 dbq.__streams_pool_size=0

4 *.audit_file_dest='/u01/app/oracle/admin/dbq/adump'

5

*.background_dump_dest='/u01/app/oracle/admin/dbq/bdump'

6 *.compatible='10.2.0.5.0'

7 *.db_block_size=8192

8 *.db_file_multiblock_read_count=64

9 *.db_name='dbq'

10 *.dispatchers='(PROTOCOL=TCP)

(SERVICE=dbqXDB)'

11 *.job_queue_processes=10

12 *.open_cursors=300

13 *.pga_aggregate_target=94371840

14 *.processes=150

15 *.sga_target=285212672

16 *.undo_management='AUTO'

17 *.undo_tablespace='UNDOTBS1'

2.1.1.查询带有字符串为sga的行

选项 –n:sed命令相关的操作。

命令  p:打印到屏幕。

[root@db10g1 sed]# sed -n '/sga/p' initdbq.ora

15 *.sga_target=285212672

2.1.2.删除第4行

命令d:删除

[root@db10g1 sed]# sed '4d' initdbq.ora

1 dbq.__large_pool_size=4194304

2 dbq.__shared_pool_size=83886080

3 dbq.__streams_pool_size=0

5

*.background_dump_dest='/u01/app/oracle/admin/dbq/bdump'

6 *.compatible='10.2.0.5.0'

7 *.db_block_size=8192

8 *.db_file_multiblock_read_count=64

9 *.db_name='dbq'

10 *.dispatchers='(PROTOCOL=TCP)

(SERVICE=dbqXDB)'

11 *.job_queue_processes=10

12 *.open_cursors=300

13 *.pga_aggregate_target=94371840

14 *.processes=150

15 *.sga_target=285212672

16 *.undo_management='AUTO'

17

*.undo_tablespace='UNDOTBS1'

2.1.3.删除空行

[root@db10g1 sed]# sed /^$/d initdbq.ora

2.1.4.删除从第3行到最后一行

命令$:最后一行

[root@db10g1 sed]# sed '2,$d' initdbq.ora

1 dbq.__large_pool_size=4194304

2.1.5.删除带有dbq的行

[root@db10g1 sed]# sed '/dbq'/d initdbq.ora

6 *.compatible='10.2.0.5.0'

7 *.db_block_size=8192

8 *.db_file_multiblock_read_count=64

11 *.job_queue_processes=10

12 *.open_cursors=300

13 *.pga_aggregate_target=94371840

14 *.processes=150

15 *.sga_target=285212672

16 *.undo_management='AUTO'

17 *.undo_tablespace='UNDOTBS1'

2.1.6.全局替换dbq为dba

参数s:替换

参数g:全局

[root@db10g1 sed]# sed -n 's/dbq/dba/g'p

initdbq.ora

1 dba.__large_pool_size=4194304

2 dba.__shared_pool_size=83886080

3 dba.__streams_pool_size=0

4

*.audit_file_dest='/u01/app/oracle/admin/dba/adump'

5

*.background_dump_dest='/u01/app/oracle/admin/dba/bdump'

9 *.db_name='dba'

10

*.dispatchers='(PROTOCOL=TCP) (SERVICE=dbaXDB)'

2.1.7.全局替换以数字空格dbq字符串为abc,并打印到屏幕

-n选项与p命令一般为同时出现,意思为只显示那个改变了的行

[root@db10g1 sed]# sed -n 's/^[0-9] dbq/abc/'gp

initdbq.ora

abc.__large_pool_size=4194304

abc.__shared_pool_size=83886080

abc.__streams_pool_size=0

2.1.8.替换数字285212672为285212672M

参数&:意思为原操作字符串

[root@db10g1 sed]# sed -n 's/285212672/&M/gp'

initdbq.ora

15 *.sga_target=285212672M

2.1.9.显示db_block到db_name之间的行

[root@db10g1 sed]# sed -n '/db_block/,/db_name/'p

initdbq.ora

7 *.db_block_size=8192

8 *.db_file_multiblock_read_count=64

9 *.db_name='dbq'

2.1.10.–e选项允许在同一行里执行多条命令

第一个-e选项是将dbq替换为aaa。第二个-e是将第4行到最后一行全部删除

[root@db10g1 sed]# sed -e 's/dbq/aaa/g' -e '4,$d'

initdbq.ora

1 aaa.__large_pool_size=4194304

2 aaa.__shared_pool_size=83886080

3 aaa.__streams_pool_size=0

2.1.11.r命令可从文件读取

使用r命令从abc.txt文件中读取并添加到dbq的下行

[root@db10g1 sed]# sed '/dbq/r abc.txt'

initdbq.ora

1 dbq.__large_pool_size=4194304

hi,i am dba

2 dbq.__shared_pool_size=83886080

hi,i am dba

。。。。。。。。。。。省略

2.1.12.写入文件:w命令

使用此w命令或是重定向就可以修改原文件了

[root@db10g1 sed]# sed '/undo/w undo.txt'

initdbq.ora

[root@db10g1 sed]# cat undo.txt

16 *.undo_management='AUTO'

17 *.undo_tablespace='UNDOTBS1'

2.1.13.将UNDOTBS1修改为UNDOTBS2并重定向到一个新文件,然后使用mv替换掉原文件

[root@db10g1 sed]# sed 's/UNDOTBS1/UNDOTBS2/g'

initdbq.ora > newinitdbq.ora

[root@db10g1 sed]# cat newinitdbq.ora

1 dbq.__large_pool_size=4194304

2 dbq.__shared_pool_size=83886080

3 dbq.__streams_pool_size=0

4

*.audit_file_dest='/u01/app/oracle/admin/dbq/adump'

5

*.background_dump_dest='/u01/app/oracle/admin/dbq/bdump'

6 *.compatible='10.2.0.5.0'

7 *.db_block_size=8192

8 *.db_file_multiblock_read_count=64

9 *.db_name='dbq'

10 *.dispatchers='(PROTOCOL=TCP)

(SERVICE=dbqXDB)'

11 *.job_queue_processes=10

12 *.open_cursors=300

13 *.pga_aggregate_target=94371840

14 *.processes=150

15 *.sga_target=285212672

16 *.undo_management='AUTO'

17 *.undo_tablespace='UNDOTBS2'

[root@db10g1 sed]# mv newinitdbq.ora initdbq.ora

mv: overwrite `initdbq.ora'?

2.1.14.使用-i选项修改原文件

[root@db10g1 sed]# sed -i 's/UNDOTBS1/UNDOTBS2/g'

initdbq.ora

2.1.15.i插入新行

[root@db10g1 sed]# sed '/1 dbq/i\----------new

line -----' initdbq.ora

----------new line -----

1

dbq.__large_pool_size=4194304

2.2.sed脚本

Sed脚本是一个sed的命令清单,启动Sed时以-f选项引导脚本文件名。Sed对于脚本中输入的命令非常严格,在命令的末尾不能有任何空白或文本,如果在一行中有多个命令,要用分号分隔。以#开头的行为注释行,且不能跨行。

使用脚本方式在db_name行追加新的一行。

[root@db10g1 sed]# cat sed.sed

#!/bin/sed -f

/db_name/ a\

hp linux

[root@db10g1 sed]# chmod u+x sed.sed

[root@db10g1 sed]# ./sed.sed initdbq.ora

3.选项

-e command, –expression=command

允许多台编辑。

-h, –help

打印帮助,并显示bug列表的地址。

-n, –quiet, –silent

取消默认输出。

-f, –filer=script-file

引导sed脚本文件名。

-V, –version

打印版本和版权信息。

4.sed命令

a\

在当前行后面加入一行文本。

b lable

分支到脚本中带有标记的地方,如果分支不存在则分支到脚本的末尾。

c\

用新的文本改变本行的文本。

d

从模板块(Pattern space)位置删除行。

D

删除模板块的第一行。

i\

在当前行上面插入文本。

h

拷贝模板块的内容到内存中的缓冲区。

H

追加模板块的内容到内存中的缓冲区

g

获得内存缓冲区的内容,并替代当前模板块中的文本。

G

获得内存缓冲区的内容,并追加到当前模板块文本的后面。

l

列表不能打印字符的清单。

n

读取下一个输入行,用下一个命令处理新的行而不是用第一个命令。

N

追加下一个输入行到模板块后面并在二者间嵌入一个新行,改变当前行号码。

p

打印模板块的行。

P(大写)

打印模板块的第一行。

q

退出Sed。

r file

从file中读行。

t label

if分支,从最后一行开始,条件一旦满足或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾。

T label

错误分支,从最后一行开始,一旦发生错误或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾。

w file

写并追加模板块到file末尾。

W file

写并追加模板块的第一行到file末尾。

!

表示后面的命令对所有没有被选定的行发生作用。

s/re/string/

用string替换正则表达式re。

=

打印当前行号码。

#

把注释扩展到下一个换行符以前。

以下的是替换标记

l  g表示行内全面替换。

l  p表示打印行。

l  w表示把行写入一个文件。

l  x表示互换模板块中的文本和缓冲区中的文本。

l  y表示把一个字符翻译为另外的字符(但是不用于正则表达式)

linux 0.11 编译 msed,Linux下sed命令使用相关推荐

  1. 自己动手搭建 Linux 0.12 编译环境 — Linux主机

    Hi,又见面了,这两天事情比较少,所以又快速构思这篇的内容. 上篇我用极简模式说完了关于Linux 0.12的模拟环境Bochs,这篇同样沿袭上篇的思路,不过主要内容是关于Linux主机.在搭建Lin ...

  2. linux 0.11根文件系统,linux内核与根文件系统之间的关联的理解

    学者 于 2011-10-19 12:46:08发表: 哦,原来还有一个initrd镜像,后缀名为".img",我一直以为只有一个内核镜像呢: 还有引导程序的路径表示与系统不同啊! ...

  3. Xp下的程序编译成linux,WinXP下打造自己的linux 0.11简易编译环境(原创)

    http://caiwei8888.blog.163.com/blog/static/3017424120101913353856/ 学习赵炯博士的<linux 0.11 内核完全注释>, ...

  4. linux 0.11 源码学习(二)

    linux 0.11的运行 linux 0.11版本的编译和运行可以基于bochs,个人参考的是赵博的文章,主要是三块工作: 制作linux镜像,按要求修改makefile后,可以直接在redhat上 ...

  5. Linux 0.11 fork 函数(二)

    Linux 0.11 系列文章 Linux 0.11启动过程分析(一) Linux 0.11 fork 函数(二) Linux0.11 缺页处理(三) Linux0.11 根文件系统挂载(四) Lin ...

  6. Linux 0.11 实验环境搭建与调试

    缘起 之前我写过一篇博文:Linux 0.11 实验环境搭建 本以为有了这个环境(gcc-3.4 & gdb-6.8),就可以调试无忧了.谁知遇到了以下问题: (1)用 gdb 调试 main ...

  7. Linux 0.11 实验环境搭建

    如果想学习Linux 0.11,实验环境是必不可少的.最好是能编译,能运行,能调试. 如今大家都是用64位的Linux操作系统,而且是高版本的GCC(4.0以上),所以环境搭建是个难题.要么就是编译后 ...

  8. Linux 0.11内核分析04:多进程视图

    目录 1 进程概念的引入 1.1 使用CPU的直观想法 1.2 直观用法的缺点 1.3 直观用法的改进 1.4 进程的概念 1.4.1 保存程序执行状态 1.4.2 进程与PCB 1.5 Linux ...

  9. Linux 0.11内核分析03:系统调用

    目录 1 概述 1.1 什么是系统调用 1.2 为什么需要系统调用 2 系统调用基础设施 2.1 安装系统门 2.1.1 中断描述符 2.1.2 中断描述符安装函数 2.1.3 安装0x80系统门 2 ...

最新文章

  1. 使用Windows7上的VS Code打开远程机Ubuntu上的文件操作步骤
  2. 慕课网Flask高级编程实战-10.鱼书业务处理
  3. centos7安装php5.2yum源操作_CentOS 7下Yum安装PHP7.2步骤
  4. 编写书籍《C语言嵌入式系统编程修炼之道》序言
  5. Silverlight教程第四部分:使用 Style 元素更好地封装观感 (木野狐译)
  6. Java 8 Friday Goodies:Lambda和SQL
  7. linux执行sh提示非标准环境,Linux执行.sh文件时提示No such file or directory该怎么办(三种解决办法)...
  8. navicat fo mysql 教程_Navicat For MySQL的简单使用教程
  9. F - 你这是第一次让我看到落泪了呢 POJ - 3661Running 区间DP
  10. C语言实现的RSA算法程序
  11. Bash中命令连接符的用法——一次执行多个命令-转
  12. Julia : Jupyter notebook 中试玩Julia
  13. 【优化调度】基于matlab粒子群算法求解梯级水电站调度优化问题【含Matlab源码 065期】
  14. 软件项目管理案例分析
  15. Samba共享文件夹Windows中拷贝文件拒绝访问
  16. 欧莱雅迎来入华25周年;万代南梦宫集团将启用新logo | 美通企业日报
  17. WPF GMap使用高德地图
  18. 电子印章怎么验证真假?
  19. JWT最全知识点-动力节点
  20. Unity3D游戏开发-宣雨松读书摘要(2015-4-17 18:36)

热门文章

  1. 【力扣】1319. 连通网络的操作次数
  2. 影响APP开发价格高低的因素有哪些
  3. 企业抖音运营部门岗位短视频工作计划表策划案
  4. 米6 运行 linux,小米6成功刷入统信UOS系统 刷机包开放下载
  5. hsrp 切换_冠县双电源切换原理图详情
  6. 图片配准并制作专题图 |全国大学生GIS技能大赛(附练习数据)
  7. Java 19 虚拟线程
  8. ES6-Reflect属性介绍
  9. 蓝桥杯嵌入式 ---- “空手套白狼“ 之 按键长按 短按
  10. JavaWeb文件上传