1

我在一个变量中有多个 ip 地址。

ActiveIPs=192.168.0.1 192.168.0.2 192.168.0.3

我想将它们保存到这样的文件中,由换行符分隔

192.168.0.1
192.168.0.2
192.168.0.3

我该怎么做呢?

4

6 回答 6

2
$ ActiveIPs="192.168.0.1 192.168.0.2 192.168.0.3"

$ awk '1' RS=' ' <<< "$ActiveIPs"
192.168.0.1
192.168.0.2
192.168.0.3
于 2013-04-19T12:03:13.340 回答
1

使用参数扩展将所有空格字符更改为换行符:

$ foo='abc def ghi'
$ echo "${foo// /$'\n'}"
abc
def
ghi

使用参数扩展完全避免了创建新进程,甚至没有内置命令。

如果可以,最好将值保存到数组中:

$ input=( 192.168.0.100 10.0.0.1 192.168.0.101 )

这样,您可以完全控制 shell 如何拆分单词,并且您仍然不必调用外部命令。

$ SAVE_IFS="$IFS"
$ IFS=$'\n'
$ echo "${input[*]}"
192.168.0.100
10.0.0.1
192.168.0.101
于 2013-04-19T11:58:44.353 回答
1

printf将根据需要重复一个模式。

ActiveIPs="192.168.0.1 192.168.0.2 192.168.0.3"
printf "%s\n" $ActiveIPs > file.txt
于 2013-04-19T11:53:37.573 回答
1
for ip in $ActiveIPs; do
    echo $ip >> file
done
于 2013-04-19T11:55:12.623 回答
0

Maybe too basic, but this works:

echo "ActiveIPs= 192.168.0.1 192.168.0.2 192.168.0.3" | cut -d= -f2 | awk '{for (i=1;i<=NF;i++) print $i}'

Output:

192.168.0.1                                                                                                                                                                                                                                                                    
192.168.0.2                                                                                                                                                                                                                                                                    
192.168.0.3

To everyone: is there a better way to print a new line between each field in awk? Tried with OFS='\n' but did not work.

于 2013-04-19T11:45:55.683 回答
0

注意 - 在\命中换行符之后立即:

echo $ActiveIPs | sed 's/ /\
/g'
于 2013-04-19T11:54:37.170 回答