我在变量中有多个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
我该怎么做?
答案 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'