shell脚本编程学习笔记(3)sed命令的使用

本文主要参考《sed&awk》。

我们平时使用的编辑器,比如vi,是交互式的编辑器,就是想修改哪个地方,就先定位到哪个地方,通常通过移动光标来完成。而sed是一个非交互式的面向字符流的编辑器,或者叫流编辑器。sed直接处理输入流并将结果送到标准输出。sed通过解释脚本来工作,该脚本指定了将要执行的动作。

sed每次从输入文件中读取一个输入行,生成该输入行的备份,并且对改备份执行脚本中指定的指令操作。因此,对输入行所做的改动不会影响到真正的输入行。并且,sed的工作模式,是每次处理输入流中的一行。假设有一个sed脚本,名为scriptfile,我们可以通过 sed -f scriptfile inputfile 来执行。执行过程是,读入输入文件inputfile中的第一行,scriptfile脚本文件中的每一条语句对该行进行处理后,再读入第二行,知道结束。这是sed的工作过程。

sed的简单应用举例:

sed   ‘s/ MA/,Massachusetts/‘   list

该指令的意思是将list文件中的MA替换为,Massachusetts,如果要指定多重指令,可以用-e,比如

sed   -e  ‘s/ MA/,Massachusetts/‘  -e  ‘s/  PA/,Pennsylvania/‘  list

或者用分号隔开

sed    ‘s/ MA/,Massachusetts/  ; s/  PA/,Pennsylvania/‘  list

指令sed -n -e  ‘s/ MA/,Massachusetts/‘   list的意思是该行不输出显示,这就是-n的作用:组织输入行的自动输出。

sed主要有这三个命令行选项:

-e 表示编辑随后的指令

-f  表示跟随脚本的文件名

-n 表示组织输入行的自动输出。

基本的sed命令

语法格式:[address]command

address表示行地址,它可以是行号,正则表达式匹配的行等。后面的command就是sed指令了。

也可以用大括号对多个指令进行分组,使得多个指令作用于同一行,格式如下:

address{

command1

command2

command3

}

注释

和shell一样,注释用#

替换

[address] s/pattern/replacement/flags

意思是对address行中与pattern匹配的部分替换成replacement。

其中,flags有几种取值:

n  1到512之间的一个数字,表示对本模式中指定模式第n次出现的情况进行替换。

g  对模式空间的所有出现的情况进行全局更改,而默认情况下只是替换第一次出现的情况。

p  打印模式空间的内容

w file   将模式空间中的内容写到file文件。

删除  d

比如删除空行:  /^$/d

d前面的就是我们所说的adress部分,表示这些行,这里是指空行,d将这些行删除。

追加、插入和更改

[address]a\

text

[address]i\

text

[address]c\

text

插入命令将所提供的文本text放置在模式空间的当前行之前,追加命令将文本放置在当前行之后,更改命令用所提供的文本取代模式空间的内容。

列表

列表命令为l,用于显示模式空间的内容,将非打印的字符显示为两个数字的ASCII代码。

转换

[address] y/abc/xyz

该命令将字符串abc中的每个字符转换为字符串xyz中的等价字符。

退出命令

q

该命令使得sed停止读取新的输入行,并停止将它们发送到输出。

时间: 2024-12-19 14:23:38

shell脚本编程学习笔记(3)sed命令的使用的相关文章

Linux Shell脚本编程学习笔记和实战

http://www.1987.name/141.html shell基础 终端打印.算术运算.常用变量 Linux下搜索指定目录下特定字符串并高亮显示匹配关键词 从键盘或文件中获取标准输入 [read命令] 文件的描述符和重定向 数组.关联数组和别名使用 函数的定义.执行.传参和递归函数 条件测试操作与流程控制语句 获取时间日期格式和延时 [date.sleep命令] 内部字段分隔符IFS和脚本的调试DEBUG 显示.读取或拼接文件内容 [cat命令] 文件查找与打印文件列表 [find命令]

shell脚本编程学习笔记(1)

在linux上编程,离不开shell,计划好好看看shell编程,并在这里做些笔记以供有相同兴趣的人分享,主要参考<shell脚本学习指南>. 学习shell脚本编程之前,需要了解脚本编程语言和编译型语言的概念. 一般很多中型.大型的程序是用编译型语言写成的,比如C.C++.Java等.这类程序从源代码编译成目标代码,直接通过计算机执行.编译型语言执行效率比较高,大多运作于底层,处理的是字节.整数.浮点数等机器层级的对象,因此实现一个具体的功能,比如"将一个目录里的所有文件复制到另外

shell脚本编程学习笔记-shell脚本编程基础介绍

一. Shell脚本介绍及第一个规范shell脚本说明 1.1 shell脚本简介 1.1.1 shell是什么? shell是一个命令解释器它在操作系统的最外层负责直接与用户对话把用户的输入解释给操作系统并处理各种各样的操作系统的输入结果输出到屏幕返回给用户,这种对话可以是交互是的(从键盘输入命令可以立即得到shell的回应)或非交互(脚本的方式). 下图中×××的部分就是shell处于操作系统的位置. 1.1.2什么是shell脚本 当linux命令或语句不在命令行下执行(严格的说命令行执行

shell脚本编程学习笔记-case语句

1.case结构条件语句语法 case语句实际上就是规范的多分支if语句 case "字符串变量"in 值1)指令1- ;; 值2)指令2- ;; *)指令3- esac 中文编程语法: case "找女朋友条件"in 有房)嫁给你- ;; 你爸是李刚)嫁给你- ;; 努力吃苦)可以考虑先谈朋友- ;; *)good bye!!! esac 2.简单case脚本 输入1.2.3分别输出对应的值 [[email protected] jiaobenlianxi]# c

shell脚本编程学习笔记-整数二次元比较操作符

1.1 下表为常用二次元比较操作符 我们也可以通过man test查看 提示 (1) "<"符号是小于的意思,if[[ "$a"<"$b" ]], if[[ "$a"\<"$b" ]].在单括号中需要转义,因为在shell也用<和>做重定向. (2) ">"符号是大于的意思,if[[ "$a"> "$b"

shell脚本编程学习笔记-while循环

1.当型循环和直到型循环 While使用的不多,一般守护进程程序或始终循环执行会用,其他循环运算都用for代替. 1.1 当型和直到型循环语法 (1)while条件语句 语法: While 条件 do 指令-. done 手机充值:发短信扣费,充值100,每次扣1角5,当费用低于1角5分就不能发了. (2)until条件语句 语法: until 条件 do 指令- Done 提示:只循环一次,应用场景不多,了解就好. 1.2 当型和直到型循环基本范例 休息命令:sleep休息1秒,usleep1

shell脚本编程学习笔记-shell数组

1.数组的介绍 平时定义a=1;b=2;c=3,变量多了,再一个一个定义就费劲了. 简单的说数组就是数据类型的元素按一定顺序排列的集合. 数组就是有限个元素变量或数据用一个名字命名,然后用编号区分他们的变量的集合,这个名字称为数组,编号称为数组的下标.组成数组的多个变量称为数组的分量,也称为数组的元素,有时也称为下标变量. 2.数组的定义与增删改查 (1) 数组的定义 一对括号表示数组,数组元素用"空格"符号分隔开 array=(value1 value2 value3-.) [[em

shell脚本编程学习笔记(四)shell操作数据库

一.数据库基本操作 1)登录mysql服务器:mysql -u root -p 密码 2)查看数据库:show databases 3)查看表:show tales from db; 4)查看表结构:desc table; 5)创建表:create table table(); 6)查看表数据:select * from table; 7)插入数据:insert into table(f1,f2) values('v1','v2'); 8)删除数据:delete from table where

shell脚本编程学习笔记-逻辑操作符

1.1 下表为逻辑操作符 提示: !中文意思是反:与一个逻辑值相反的逻辑值. -a中文意思是与(&&):两个逻辑值都为真返回值才为真,反之为假. -o中文意思是或(or):两个逻辑值只要一个为真,返回值为真. 结论: (1)-a和&&的运算规则:只有两端都是1才为真相当于乘法运算. 真 true 1 假 false 0 And 1*0=0 And 0*1=0 And 1*1=1 And 0*0=0 只有两端都是1才为真,and交集 (2)-o或||两端都是0才为假,任何一端