将变量保存到文件时的换行符 - bash

时间:2013-04-19 11:41:48

标签: bash

我在变量中有多个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

我该怎么做?

6 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

printf会根据需要重复一种模式。

ActiveIPs="192.168.0.1 192.168.0.2 192.168.0.3"
printf "%s\n" $ActiveIPs > file.txt

答案 2 :(得分:1)

for ip in $ActiveIPs; do
    echo $ip >> file
done

答案 3 :(得分: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

答案 4 :(得分:0)

也许太基础了,但这很有效:

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}'

输出:

192.168.0.1                                                                                                                                                                                                                                                                    
192.168.0.2                                                                                                                                                                                                                                                                    
192.168.0.3

致每个人:是否有更好的方法在awk中的每个字段之间打印新行?试过OFS='\n'但没有用。

答案 5 :(得分:0)

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

echo $ActiveIPs | sed 's/ /\
/g'