[英]Append space and \ character to each line, except the last
我正在使用bash脚本,其中ipset(iptables扩展名)要求CIDR格式的条目在每个CIDR行的末尾附加“ [单个空格] \\”,以输入到集合中。 例如,文件中的一些随机条目应如下所示:
175.30.0.0/15 \
175.42.0.0/15 \
175.76.0.0/15
最后一行没有\\
表示列表的末尾。 使用sed
或任何其他方法,最简单的方法是在此符号和它前面的空格之前追加符号? 是否有合理的方式编写条件以省略最后一个斜杠?
sed -e 's/$/ \\/' -e '$s/ \\$//'
在每行的末尾添加反斜杠; 删除最后一行末尾的空格反斜杠。
这似乎可行,这里假设中间有空白行
$ 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
AWK解决方案:
awk 'NR > 1{print line" \\"}{line=$0;}END{print $0" "}' inputfile
awk '{printf "%s%s",sep,$0; sep=" \\\n"} END{print ""}' file
您可以使用以下awk命令:
awk '{arr[cnt++]=$0;}
END {for (i=0; i<length(arr)-1; i++) print arr[i]" \\"; print arr[i]" "}' input
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.