第五章 基本sed命令
1. sed命令的基本语法:
(1) 行地址是可选的,它可以是一个模式,被描述为由斜杠,行号或者行寻址符号括住的正则表达式。
(2) 大部分sed命令接收由逗号隔开的两个地址,有一些命令值接受单个行地址。
还可以用大括号进行分组使其作用域同一个地址
2. 注释: 注释行的第一个字符一定是#号,可以用反斜杠结束前面的注释可以继续。若#后面的下一个字符是n,那么脚本不会自动产生输出。与命令行选项-n是等价的!
3. 替换:
(1) 语法:
常见的替换标志flags有:
n-------------表示对本模式中指定模式第n次出现的情况进行替换
g-------------对模式空间的所有出现的情况进行全局更改,若没有g,通常只是第一次出现的情况被取代
p-------------打印模式空间的内容
w-------------将模式空间的内容写得文件file中
(2) 解释:
♥ 若没有指定地址,那么就应该应用于与pattern匹配的所有行,若地址被提供,而没有指定模式,
那么匹配由地址匹配的内容。
♥ 地址需要一个斜杠作为定界符,而正则表达式可以使用出换行符的任意字符来分隔,如!
♥ replacement是一个字符串,用来替换正则表达式中的内容,在replacement部分,只有下列字符具有特殊含义:
&-----------------用正则表达式匹配的内容进行替换
\n-----------------匹配第n个字串,这个字串之前在pattern中用\(和\)指定
\--------------------转义
♥ flag标志可以进行组合,如gp表示进行全局替换后并打印出来
♥ 数字标志的使用:
sed 's/*/!/2' test-----------------将test文件中第二个出现的*替换为!
(3) 替换元字符:主要是值反斜杠、与符号和\n
反斜杠一般用于转义其他的元字符,但是它在替换字符串中也用于包含换行符。
sed 's/*/\
/2' test--------------------------表示将test文件中的第二个*替换成空,并包含换行符
on the UNIX Operation System---------------àon the \s-2UNIX\s0 Operation System
4. 删除
(1) 删除命令是一个可以改变脚本中的控制流的命令,一旦执行删除命令,那么这个“空的”模式空间就不能再进行其它的执行命令!
(2) 注意:删除命令是以行为单位的!而不仅是行中所匹配的部分。
5. 追加、插入和更改
(1) 追加:将文本放置在当前行之后
(2) 插入:将文本放置在模式空间的当前行之前
(3) 更改:更改命令用所提供的文本取代模式空间中的内容
【注意】这些命令的每一个都要求后面跟一个反斜杠用于转义第一个行尾。text必须从下一行开始输入。
(4) 追加命令和插入命令只应用于单个行地址,而不是一个范围内的行,然而更改命令可以处理一个范围内的行,这种情况下,它用一个文本备份取代所有被寻址的行。注意,所提供的文本却仅仅只输出一次!
6. 列表命令(l):可以用此命令来检测输入中的“不可见”字符,如行尾,一些非打印字符等。
[root@localhost sedawk2progs]# sed -n 'l' test
abc$
gh$
js$
cdw$
其中$代表行尾。
7. 转换(y)-------------------对应匹配,对应转换
语法:
它会将字符串abc中的每个字符,都转换成字符串xyz中的等价字符,注意替换是按照字符的位置进行
的,因此,它没有“词”的概念。
(完成大写字母替换对应的小写字母)
8. 打印(p): 用来输出模式空间的内容,除非抑制默认的输出(-n),否则它将输出行的重复复制。
9. 打印行号:跟在地址后面的等号=打印被匹配的行的行号,除非抑制自动输出否则行号和行均将被打印出来。语法为:
10. 下一步命令(n):输出模式空间中的内容,然后读取输出下一行,而不用返回到脚本的顶端。语法:
next命令改变了正常的流控制,这正是它的主要目的。
11. 读与写文件命令(r,w): 命令可以直接处理文件。语法:
读命令将由file指定的文件确定的行之后的内容读入模式空间。它不能对一个范围内的行进行操作。
写命令是将模式空间的内容写入文件中。
12. 退出命令(q):会使sed停止读取新的输入行。语法:
一旦找到和address匹配的行,脚本就结束。
sed ‘100q’ test----------使用退出命令打印前100行
【注意】quit一个可能想到的用处是,从文件中提取出想要的内容之后自动退出脚本,但是,这一版不会
得逞,因为quit命令使得只要找到和address匹配的行,它就会立马退出!