为每行添加空格和\字符,除了最后一行

时间:2013-06-12 21:40:05

标签: linux bash shell sed awk

我正在研究一个bash脚本,其中ipset(一个iptables扩展)要求CIDR格式的条目将“[single space] \”附加到每个CIDR行的末尾以输入到集合中。例如,文件中的一些随机条目应如下所示:

175.30.0.0/15 \
175.42.0.0/15 \
175.76.0.0/15 

没有\的最后一行表示列表的结尾。使用sed或任何其他方法,最简单的方法是将这个符号及其前面的空格添加到它之前是什么?是否有合理的方法来编写条件以省略最后一个斜杠?

5 个答案:

答案 0 :(得分:6)

sed -e 's/$/ \\/' -e '$s/ \\$//'

在每一行的末尾添加空格反斜杠;删除最后一行末尾的空格反斜杠。

答案 1 :(得分:1)

这似乎有用,这里假设中间有空行

$ cat input
175.30.0.0/15

175.42.0.0/15

175.76.0.0/15

$ sed -e '$ ! {/./s/$/ \\/}' input
175.30.0.0/15 \

175.42.0.0/15 \

175.76.0.0/15

如果没有空行,可以缩短为:

$ sed -e '$ ! s/$/ \\/' input

答案 2 :(得分:0)

Awk解决方案:

 awk 'NR > 1{print line" \\"}{line=$0;}END{print $0" "}' inputfile

答案 3 :(得分:0)

awk '{printf "%s%s",sep,$0; sep=" \\\n"} END{print ""}' file

答案 4 :(得分:0)

您可以使用此awk命令:

awk '{arr[cnt++]=$0;} 
      END {for (i=0; i<length(arr)-1; i++) print arr[i]" \\"; print arr[i]" "}' input