我正在研究一个bash脚本,其中ipset(一个iptables扩展)要求CIDR格式的条目将“[single space] \”附加到每个CIDR行的末尾以输入到集合中。例如,文件中的一些随机条目应如下所示:
175.30.0.0/15 \
175.42.0.0/15 \
175.76.0.0/15
没有\
的最后一行表示列表的结尾。使用sed
或任何其他方法,最简单的方法是将这个符号及其前面的空格添加到它之前是什么?是否有合理的方法来编写条件以省略最后一个斜杠?
答案 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