1.sed是以行为单位进行数据处理的。sed是管道命令。
2.sed命令格式
sed [-options] '[n1 [,n2]] funtion'
其中,n1,n2表示行号,是可选的参数($符号表示最后一行)。funtion的类型如下所示:
a:新增,新增行出现在当前行的下一行
c:替换
d:删除
i:插入,新增行出现在当前行的下一行
p:打印
s:查找并替换
3.sed的用法举例
(1)以行为单位的新增/删除功能
eg. nl /etc/passwd | sed '2,4d' ——表示删除第2到4行的内容。
eg. nl /etc/passwd | sed '2a wahaha' ——表示在第二行后加上内容为wahaha的一行。
(2)以行为单位的替换和显示功能
eg. nl /etc/passwd | sed '2,5c wahaha' ——表示将第2到5行的内容替换成内容为wahaha的一行。
eg. nl /etc/passwd | sed -n '5,7p' ——表示将第5到7行的内容打印出来。-n选项表示的是安静模式。
(3)以行为单位替换行中的部分数据的功能
形式为:sed 's/要被替换的字符串/新的字符串/g'
备注,如果上述形式中没有g标记,那么每行只有第一个匹配的串会被替换,后面匹配的均不会被替换,是每行都是只有第一个匹配才会被替换哦。如果后面是/Ng表示每行从第N个匹配处开始操作。
(4)sed '1,/^wahaha/d' 将第一行到以wahaha开始的行之间的行删除。
4.sed的常用选项:
-n 表示sed使用安静模式,默认情况下sed会将sed处理过的行以及其他未经sed处理的行全部输出到屏幕上,但加上-n选项,sed只会将sed特殊处理过的行打印到屏幕上。
-i 直接编辑文件内容,很危险的选项。如果在sed命令中加入-i选项,那么就可以直接修改文件的内容,但这个应用场景要谨慎使用。
-e 与-f对应,-e直接在命令行进行sed的动作编辑。另外,在命令行上一个sed命令中可有多个-e参数。例如,sed -i -e 's/^\[\.*/[/g' -e 's/^\[@/[/g' -e 's/:\s*/=/g' filename
-f filename 将sed的动作写入到文件中
5.sed的一些其他的用法
(1)\(pattern\)
表示将‘正则表达式’匹配到的字符串保存起来,后面可以用\1,\2等依次引用。例如,
1,20s/\(you\)self/\1r/ 标记元字符之间的模式,并将其保存为标签1,之后可以使用\1来引用它。最多可以定义9个标签,从左边开始编号,最左边的是第一个。此例中,对第1到第20行进行处理,you被保存为标签1,如果发现youself,则替换为your。
(2)场景(1)中,变量\1代表\(\) 中pattern内容,而sed中&符号可以代表s/pattern//g中pattern中匹配的内容。1,20s/[you]self/[&]/ 表示将[you]self匹配到的字符串用中括号[]括起来。
(3)/pattern/的使用
例如删除空白行,sed '/^$/d' filename,其中的正则表达式pattern用//包含起来。有一个特殊的用法如下
sed -n '/01-10 00:30:/,/01-10 00:44:/p' access.log.2016011000 #将access日志中00点30 到 00点44之间的access日志打印出来。
(4)若直接修改文件内容有下面三种方式: