1.sed替换换行符及标签的使用

echo "a,b,c,d" |sed 's/,/\n/g'|sed 's/\n/,/g'

解析:以上命令实现不了替换换行符,这跟sed的行处理方式有关,sed读取一行时,会先把换行符去掉,处理完后再添加上,所以是无法使用上面的命令进行换行符替换的,必须使用sed中的其它命令来完成。上面的恢复可以使用tr命令:

echo "a,b,c,d" |sed 's/,/\n/g'|tr -t '\n' ','

以下命令能实现替换文本中全部换行符:

sed ':label;N;s/\n/:/;b label' filename
sed ':label;N;s/\n/:/;t label' filename

解析:

:label;  这是一个标签,用来实现跳转处理,名字可以随便取(label),后面的b label就是跳转指令

N;  N是sed的一个处理命令,追加文本流中的下一行到模式空间进行合并处理,因此是换行符可见

s/\n/:/;   s是sed的替换命令,将换行符替换为冒号

b label  或者 t label    b / t 是sed的跳转命令,跳转到指定的标签处

2.sed输出奇数行和偶数行

a.

sed -n 'p;n' file    #奇数行
sed -n 'n;p' file    #偶数行

解析:n表示读取下一个输入行,用下一个命令处理新的行而不是第一个命令。

b.

sed -n '1~2p' file    #奇数行
sed -n '2~2p' file    #偶数行

解析:第一个数字表示起始行,第二个数字表示步长。

3.在字符之间插入空格

[root@localhost ~]# echo "abc" | sed 's#.#& #g'
a b c

解析:&表示前面匹配到的内容。

参考资料:

http://my.oschina.net/shelllife/blog/118337