这几天一直在看sed和awk的用法,所以我将用两个博客来总结一下sed和awk的用法,首先先将sed的用法。

    在linux的帮助文档中可以得到sed的标准形式为

      sed [options] script filename 

其中[]代表不一定需要项,基本的原理是从filename当中得到文本,然后将文本复制一份,用script中的内容对它进行操作,最后将它输出到标准输出中(也就是说其实sed的操作是不改变filename文件中的内容的,如果希望将结果输出到文件中可以使用重定向(>)操作符)。

1.script项的内容

    script项的基本形式是

                              'instrument’

 

(1)先介绍script项的第一个参数类型——替换,格式如下

'[Address]s/pattern/replacements/flags'

 解释是在Address对应的地址行中对匹配这个地址的行将pattern替换成replacements,Address必须有双斜杠的正则表达式形式(/正则表达式/),pattern也必须是正则表达式的形式。

Address代表地址匹配项,sed命令可以指定0,1,2个地址,每个地址都可以是一个双斜杠正则表达式、行号。0个地址代表作用于每一行,1个地址代表作用于与这个地址匹配的每一行,2个地址代代表地址范围,如果在地址后面带有!则表示取反匹配。 

pattern则就是普通的正则表达式形式。 

 

replacements中可以包含下面元字符:

&     用前面pattern中匹配的内容进行替换

\n    匹配第n(这是一个数字,不是换行符)个字串进行替换,这个字串在pattern中用\(和\)指定

\     替换特殊字符,比如\&代表&

 

flags可以取下面的值(如果flags没有任何内容则代表在所有行的第一次出现的时候替换)

n     1-512中的一个数,表示所有行的第n次出现的pattern替换成replacement,比如说当前行是la la la,然后格式是'/.*/s/la/aa/3',则执行后,本行变为la la aa

p     打印内容,由于sed的规则是将文件全部打印到标准输出,所以如果只想打印输出匹配地址的行则可以在options中加入-n选项。

g     将所有匹配pattern的地方都进行替换

 

(2)script的第二个参数——删除

    script项的基本形式为

'[Address]d'

Address项的解释与前面相同,表示在行的范围内删除。

 

(3)script的其他常用参数——追加、插入、更改

    script项的基本形式为

追加:'[Address]a text'

插入:'[Address]i text'

更改:'[Address]c text'

追加代表在当前匹配行的下一行添加text,i代表在当前匹配行的上一行添加text,c代表将匹配的行替换成text。Address格式和上面相同。

 

(4)script中的字符替换参数

    script项的基本形式为

 '[Address]y/chars/newchars/'

这个参数的基本作用是将文件中所有的chars中的字符替换成newchars中的字符,比如y/abc/123/,代表a替换为1,b替换为2,c替换为3