0

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

175.30.0.0/15 \
175.42.0.0/15 \
175.76.0.0/15 

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

4

5 回答 5

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

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

于 2013-06-12T21:43:01.430 回答
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
于 2013-06-12T21:45:55.163 回答
0

你可以使用这个 awk 命令:

awk '{arr[cnt++]=$0;} 
      END {for (i=0; i<length(arr)-1; i++) print arr[i]" \\"; print arr[i]" "}' input
于 2013-06-13T07:08:17.233 回答
0
awk '{printf "%s%s",sep,$0; sep=" \\\n"} END{print ""}' file
于 2013-06-13T03:20:18.960 回答
0

awk 解决方案:

 awk 'NR > 1{print line" \\"}{line=$0;}END{print $0" "}' inputfile
于 2013-06-12T22:18:49.563 回答