linux 0.11 编译 msed,Linux下sed命令使用
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命令使用相关推荐
- 自己动手搭建 Linux 0.12 编译环境 — Linux主机
Hi,又见面了,这两天事情比较少,所以又快速构思这篇的内容. 上篇我用极简模式说完了关于Linux 0.12的模拟环境Bochs,这篇同样沿袭上篇的思路,不过主要内容是关于Linux主机.在搭建Lin ...
- linux 0.11根文件系统,linux内核与根文件系统之间的关联的理解
学者 于 2011-10-19 12:46:08发表: 哦,原来还有一个initrd镜像,后缀名为".img",我一直以为只有一个内核镜像呢: 还有引导程序的路径表示与系统不同啊! ...
- Xp下的程序编译成linux,WinXP下打造自己的linux 0.11简易编译环境(原创)
http://caiwei8888.blog.163.com/blog/static/3017424120101913353856/ 学习赵炯博士的<linux 0.11 内核完全注释>, ...
- linux 0.11 源码学习(二)
linux 0.11的运行 linux 0.11版本的编译和运行可以基于bochs,个人参考的是赵博的文章,主要是三块工作: 制作linux镜像,按要求修改makefile后,可以直接在redhat上 ...
- Linux 0.11 fork 函数(二)
Linux 0.11 系列文章 Linux 0.11启动过程分析(一) Linux 0.11 fork 函数(二) Linux0.11 缺页处理(三) Linux0.11 根文件系统挂载(四) Lin ...
- Linux 0.11 实验环境搭建与调试
缘起 之前我写过一篇博文:Linux 0.11 实验环境搭建 本以为有了这个环境(gcc-3.4 & gdb-6.8),就可以调试无忧了.谁知遇到了以下问题: (1)用 gdb 调试 main ...
- Linux 0.11 实验环境搭建
如果想学习Linux 0.11,实验环境是必不可少的.最好是能编译,能运行,能调试. 如今大家都是用64位的Linux操作系统,而且是高版本的GCC(4.0以上),所以环境搭建是个难题.要么就是编译后 ...
- Linux 0.11内核分析04:多进程视图
目录 1 进程概念的引入 1.1 使用CPU的直观想法 1.2 直观用法的缺点 1.3 直观用法的改进 1.4 进程的概念 1.4.1 保存程序执行状态 1.4.2 进程与PCB 1.5 Linux ...
- Linux 0.11内核分析03:系统调用
目录 1 概述 1.1 什么是系统调用 1.2 为什么需要系统调用 2 系统调用基础设施 2.1 安装系统门 2.1.1 中断描述符 2.1.2 中断描述符安装函数 2.1.3 安装0x80系统门 2 ...
最新文章
- 使用Windows7上的VS Code打开远程机Ubuntu上的文件操作步骤
- 慕课网Flask高级编程实战-10.鱼书业务处理
- centos7安装php5.2yum源操作_CentOS 7下Yum安装PHP7.2步骤
- 编写书籍《C语言嵌入式系统编程修炼之道》序言
- Silverlight教程第四部分:使用 Style 元素更好地封装观感 (木野狐译)
- Java 8 Friday Goodies:Lambda和SQL
- linux执行sh提示非标准环境,Linux执行.sh文件时提示No such file or directory该怎么办(三种解决办法)...
- navicat fo mysql 教程_Navicat For MySQL的简单使用教程
- F - 你这是第一次让我看到落泪了呢 POJ - 3661Running 区间DP
- C语言实现的RSA算法程序
- Bash中命令连接符的用法——一次执行多个命令-转
- Julia : Jupyter notebook 中试玩Julia
- 【优化调度】基于matlab粒子群算法求解梯级水电站调度优化问题【含Matlab源码 065期】
- 软件项目管理案例分析
- Samba共享文件夹Windows中拷贝文件拒绝访问
- 欧莱雅迎来入华25周年;万代南梦宫集团将启用新logo | 美通企业日报
- WPF GMap使用高德地图
- 电子印章怎么验证真假?
- JWT最全知识点-动力节点
- Unity3D游戏开发-宣雨松读书摘要(2015-4-17 18:36)