shell脚本编程系列
加倍行间距
sed '$!G' data2.txt
保留空间的默认值是一个空行,通过G命令可以将保留空间内的内容附加到模式空间内容之后,但是最后一行不需要附加,所以通过排除命令!进行排除
对可能含有空行的文件加倍行间距
sed '/^$/d;$!G' data6.txt
首先考虑删除数据流中所有的空行,然后再通过上一个案例的方式添加空行即可
给文件中的行编号
sed '=' data2.txt | sed 'N;s/\n/ /'
使用=号可以显示行号,但是行号与内容是在不同行,如果要显示在同一行,还需要通过将行号与内容行放在一个模式空间中然后将换行符替换为空
另外 nl命令和cat -n都可以添加行号,但是格式需要调整
cat -n data2.txt | sed 's/ //;s/\t/ /'
打印末尾行
sed -n '$p' data2.txt
删除连续的空行
删除连续的空行的关键在于创建包含一个非空行和一个空行的地址区间,如果sed编辑器遇到了这个区间,它不会删除行,但对于不属于这个区间的行(两个或更多的空行),则执行删除操作。
对应的脚本为:/./,/^$/!d
指定的区间是/./到/^$/,区间的开始地址会匹配任何至少含有一个字符的行,区间的结束地址会匹配一个空行,在这个区间内容的行不会被删除
sed '/./,/^$/!d' data8.txt
删除开头的空行
/./,$!d
这个脚本用地址区间来删除行,这个区间从含有字符的行开始,一直到数据流结束,在这个区间内容的任何行都不会从输出中删除
删除结尾的行
sed '{
> :start
> /^\n*$/{$d;N;b start}
> }' data10.txt
该地址模式能够匹配只含一个换行符的行,如果找到这样的行,而且是最后一行,删除命令就会删除它,如果不是最后一行,那么N命令会将下一行附加到它后面,然后分支命令会跳到循环起始位置重新开始。
删除html标签
sed 's/<[^>]*>//g;/^$/d' data11.txt
这里要注意对于first不能把中间的first也匹配进来了,所以匹配时需要在<>中间指定字符是非>即可,另外该脚本还通过/^$/d删除了空行