通过观察总结,Sed命令一般都有如下格式:
[寻址] 操作码/[操作数]/[辅助操作]
Sed中的寻址分为三种:
1、行地址
2、行范围地址
3、正则表达式(寻找匹配行)
Sed操作码有很多种,常见的包括插入i、添加a、替换s等
操作数则根据操作码的不同,格式有所不同。
辅助操作包括打印选项p、全局提示g等
<b>This</b> is what <b>I</b> meant.
sed 's/<[^>]*>/ /g' html | sed 's/ [.]* / /g'
第一个个sed命令将<>结构全部过滤掉,并用空格代替
输出: This is what I meant.
第二个命令将多余的空格(两个或两个以上的空格)全部过滤掉
输出: This is what I meant.
方括号[]的作用:blablabla请您补充~~~
没有用方括号的时候,匹配串可能会在最大范围内进行匹配,使用方括号的时候,就会逐个匹配,一旦出现第一个匹配就立即终止。
&符号的作用:在s操作中,&表示引用即将被替换的内容。
sed 's/<[^>]*>/ /g' html | sed 's/.*/&&&/g'
输出:This is what I meant. This is what I meant. This is what I meant.
分析:.*的运算结果是整行语句,也就是说整行语句都要被替换。被替换成什么呢?&引用了被替换的内容。&&&将引用内容重复三次,所以输出了三次。
可以利用&符号在每行语句前面或者末尾添加固定内容。
N;
sed 's/<[^>]*>/ /g' html | sed = $1 | sed 'N;s//n//t/'
输出:1 This is what I meant.
解释:
sed = filename 会导致这样一个输出:行号(独立一行),数据(新起一行),行号(独立一行),数据(新起一行),etc。 这里我们使用sed = $1, $1是shell特性,表示引用上一个命令的输出流。
第三个sed命令过滤掉了行号后的换行符(/n),N命令“添加下一笔资料到 pattern space”,简单说就是将行号后的下一行合并到当前行中进行处理。
sed选项
-i 就地操作,即我们常理解的,将文件中的部分内容处理并保存。如:
sed -i "s/a/b/g" filename