1.sed替换换行符及标签的使用
shell
echo "a,b,c,d" |sed 's/,/\n/g'|sed 's/\n/,/g'
解析:以上命令实现不了替换换行符,这跟sed的行处理方式有关,sed读取一行时,会先把换行符去掉,处理完后再添加上,因此是没法使用上面的命令进行换行符替换的,必须使用sed中的其它命令来完成。上面的恢复可使用tr命令:bash
echo "a,b,c,d" |sed 's/,/\n/g'|tr -t '\n' ','
如下命令能实现替换文本中所有换行符:ide
sed ':label;N;s/\n/:/;b label' filename sed ':label;N;s/\n/:/;t label' filename
解析:spa
:label; 这是一个标签,用来实现跳转处理,名字能够随便取(label),后面的b label就是跳转指令.net
N; N是sed的一个处理命令,追加文本流中的下一行到模式空间进行合并处理,所以是换行符可见blog
s/\n/:/; s是sed的替换命令,将换行符替换为冒号get
b label 或者 t label b / t 是sed的跳转命令,跳转到指定的标签处it
2.sed输出奇数行和偶数行class
a.sed
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
解析:&表示前面匹配到的内容。
参考资料: