jsp Pattern Space和Hold Space应用实例解释



基本命令介绍请看Pattern Space and Hold Space

 Consult Section 3.1 in the Owner and Operator

Guide for a description of the tape drives

available on your system.

Look in the Owner and Operator Guide shipped with your

system.

Two manuals are provided including the Owner and

Operator Guide and the User Guide.

The Owner and Operator Guide is shipped with your system.

 

s/Owner and Operator Guide/Installation Guide/ 

/Owner/ {        

$!N     

            s/\n/ / 

            s/Owner and Operator Guide/Installation Guide\                     

            /


            }

  1. 第一行先处理关键字都集中在一行的,否则N之后可能PS中有多个Owner and Operator Guide需要替换,s/\n/是没有加g的
  2. 这个例子为什么要用到N,是因为我们要替换的关键字是分两行显示的,也可以这样使用 sed ‘/a/ { N; N; s/bc/de/ }’ file,这样的话就是合并3行一起处理
  3. $!N:如果执行到最后一行,因为N读取到下一行为空,sed为认为已经处理完文件,会退出。所以最后一行不执行N。
  4. 最后替换加个换行,是保持文件的可读性,不用都挤一起了

 

 

Sed ‘/User/ { N; s/Guide/Manual &/; P; D }’ file

  1. N读下一行,当前行和下一行用\n隔开,并看成一行;
  2. P打印PS中的内容直至遇到/n;
  3. D每次只删一行,也就是只删除PS中第一个\n之前的内容;
  4. N,P,D3个命令配合使用,解决N之有两个Guide的情况。在处理PS和HS时,\n的作用很关键(H也是,大写的都和\n有关),要特别注意。
  5. 关于读文件和打印,正常情况下,sed会自动逐行读取文件,同时脚本执行完,PS中的内容会自动打印

Sed ‘/^$/ { N; /^\n$/D }’ file  【D只删PS中第一行,逐行和下一行检查】

Sed ‘/^$/ { N; /^\n$/d }’ file  【d删除PS中所有行,每两行跳转来检查】

 

1

2

3

4

5

 

Sed ‘!G; h; $!d’file  【反转文件内容】

  PS HS
  1  
1!G -  
h 1 1
$!d - 1
  2 1
1!G 2\n1 1
h 2\n1 2\n1
$!d - 2\n1
  3 2\n1
1!G 3\n2\n1 2\n1
h 3\n2\n1 3\n2\n1
$!d - 3\n2\n1
   
1!G 5\n4\n3\n2\n1 4\n3\n2\n1
h 5\n4\n3\n2\n1 5\n4\n3\n2\n1
$!d 5\n4\n3\n2\n1 5\n4\n3\n2\n1

 

  1. $!G:读取第一行的时候,此时HS为空,没有意义
  2. $!d : d将回到脚本的开头再执行脚本,并且不打印当前行。如果没有d,脚本讲继续执行知道脚本结尾,同时打印出PS中的内容,所以最后一行不执行d,打印出反转后的文件内容。