这几天一直在看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