《Sed 和 Awk》(第二版)学习系列之第五章

来源:互联网 发布:数据产品经理面试 编辑:程序博客网 时间:2024/06/06 16:55
 

第五章 基本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匹配的行,它就会立马退出!

 

 

原创粉丝点击