首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 操作系统 >

sed与awk初学者的笔记-第四章 编写sed脚本

2012-07-02 
sed与awk菜鸟的笔记--第四章 编写sed脚本?第四章 编写sed脚本?sed脚本原理是将整个脚本分别在每行逐行执行

sed与awk菜鸟的笔记--第四章 编写sed脚本

?

第四章 编写sed脚本

?

sed脚本原理是将整个脚本分别在每行逐行执行.不是先读取脚本中的一样,然后在全文件执行,再读脚本下一行...

?

$ sed 's/pig/cow/g' file :将文件中所有的pig替换成cow.

$ sed '/aa/s/pig/cow/g' file :将文件中匹配"aa"的行中的pig替换成cow. 即根据前面的匹配条件先过滤一下,再替换.

?

删除命令:d

d:删除所有行例:sed 'd' file#不会有输出

1d:删除第一行例:sed '1d' file#输出file文件除了第一行的内容

$d:删除最后一行(不能与正则表达式的$混淆,正则要放在斜杠中.这里只表示删错最后一行) 例:sed '$d' file#输出file文件除了最后一行的内容

/^$/d:删除空行例:sed '/^$/d' file#输出文件file删除空行后的内容

/^\.TS/,/^\.TE/d :删除匹配.TS和.TE之间的所有行.(逗号前后提供了两个地址,说明指定了命令执行范围.)

/^\.TS/,/^\.TE/!d :删除除了匹配.TS和.TE之间的所有行.(跟在地址后面的!会反转匹配,结果正好与上例相反)

50,$d :删除50到最后一行的所有行.

1,/^$/d :删除从第一行直到第一个空行的所有行.命令应用于所有随后的行,直至第二个地址被匹配,所以如果后面没空行,则删除所有的行.(此例说明可以混合使用行地址和模糊地址).

?

分组命令:用大括号将一地址嵌套在另一地址中,或相同地址执行多个命令.

/AA/,/BB/{

/^$/d

}

以上脚本含义:删除匹配AA和BB两地址范围内的所有空行.(书中说左大括号必须在行末,右大括号必须独占一行,而且右大括号后没空格.试一下好像不用这么麻烦,也可能是版本问题)

?

/AA/,/BB/{/^$/d;s/pig/cow/}:在匹配AA和BB两地址范围内的所有行执行两条命令1.删除空行 2.将第一个pig替换为cow.(将组合命令凡在大括号中,对前面匹配行执行.格式我没有安上面所说的也OK)

?

?

编写一个脚本,要求如下:

1.用段落宏(.LP)取代所有空行.

2.删除每行的所有前导空格.

3.删除打印机下划线的行,即以"+"开始的行.

4.删除添加在两个单词之间的多个空格.

?

将下面填写在一个脚本文件中:

s/^$/.LP/#用.LP替换每个空行

/^+ */d#删除以加号开始,并且后面跟有至少一个空格的任意行

s/^ *//#删除行开始的n个空格

s/ */ /g#将连续多个空格替换为一个空格

s/\. */. /g#将句点后跟多个空格的替换为据点后跟两个空格

?

提取宏定义:

$ sed -n '/^\.deBL/,/^\.\.$/p' file#只打印以".deBL"开头的行和以".."自成一行之间的行. -n:阻止打印整个文件 p:显示指定打印行.

//以上指定了打印命令p的范围,这就是与grep(不能匹配行范围)的功能区别.

?

将以上写入sh脚本中,"BL"由用户输入的第一个参数自行定义:

#!/bin/sh

$ sed -n "/^\.de$1/,/^\.\.$/p" file

//以上脚本sed执行的命令必须用双引号,不能用单引号,否则不能解析参数$1

?


热点排行