sed文档简记

作者写的英文手册原址:http://www.grymoire.com/unix/Sed.html#uh-30

1.sed总体执行流程

sed文档简记_第1张图片

sed 命令:基本的模式为sed -[in] "[定位] cmd[;[定位] cmd]" 的模式,不加定位条件则表示一定执行命令。定位一般有两种,行号定位和使用正则表达式的模式匹配定位,行号定位有区间1,3和步长1~2两种方式。正则和行号定位可以混用。有些命令分为大小写,区分总体类似,但是存在细微的差别功能。

2.命令解释和样例

cmd 作用 例子
a 在当前行之后追加一行 seq 6 | sed  “3,/5/ a8”  3行直到第5行(匹配5),每行后增加一行,内容为8.
c

修改模式空间 

seq 6 | sed "3,/5/ c8" 3行直到第5行(匹配5),替换成一行,内容为8。(不是每行替换一个8)
i 在当前行之前插入一行 seq 6 | sed  “3,/5/ i8”  3行直到第5行(匹配5),每行前增加一行,内容为8.
s 替换匹配内容 seq 6 | sed -r '3,/5/ s/[0-9]/8/'  3行直到第5行(匹配5),每行替换第一个数字为8. -r 表示使用扩展的正则表达式,部分系统不需要。
d/D 删除模式空间所有行/删除模式空间首行。该命令终止之后的命令执行,会直接返回开始重新执行。 seq 6 | sed '1d' 删除第一行
n/N 取下一行覆盖到模式空间(无-n参数会先打印被覆盖的内容)/追加下一行到模式空间 seq 6 | sed ':a;N;s/\n/ /;!$ba;' 本身并不显示,主要配合其他命令使用。例子是,将所有行合并为一行。:a是设置label。!$ba,表示不是最后一行,b(branch到)a继续执行。 注意使用单引号,$符号在shell和sed中都有含义,需要注意转义的使用情况。
p/P 打印模式空间所有行/打印模式空间首行 sed 6 | sed -n 'p;n' 打印奇数行;sed 6 | sed -n ''n;p" 打印偶数行 
l 打印模式空间,用于调试多行的sed脚本.(字母是小写的L)。类似于p,但是会把不可见字符按照c的风格显示。 sed 6 | sed -n 'N;l'
g/G 从保持空间获取所有行 覆盖/追加 到模式空间 没什么用。需要使用到保持空间的复杂功能,使用shell的变成逻辑更好。没必要使用这个。用法可参考引文资料。他的例子有很多局限性,远不如shell自己实现逻辑。
h/H 从模式空间复制内容 覆盖/追加 到保持空间 没什么用
标签 :a  标签a,可被b和t命令指定。
t 测试命令。假如上一个s命令修改了模式空间,执行t命令指定的lable处。用来循环s命令的。 echo 'aa((()))bb' | sed ':a;s/()//;ta' 一次替换掉所有的((()))。使用s的g参数只能删除一层。
b 转到指定的标签  
y 字符替换命令 没什么用。使用tr处理就好了。
= 打印行号 seq 6 | sed -n '$=' 打印总行数。 除了这个不知道有什么用。不如用其他工具。

3.总结

sed是个不错的文本编辑工具。不过常用的还是单条命令或者简单逻辑配合shell的逻辑控制。sed本身的脚本功能,略显鸡肋。

 

 

 

你可能感兴趣的:(sed文档简记)