繁体   English   中英

在每行(最后一行除外)后添加空格和\\字符

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM